<?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>232079</bug_id>
          
          <creation_ts>2021-10-21 07:56:06 -0700</creation_ts>
          <short_desc>[JSC][32bit] Use DataIC in Baseline JIT</short_desc>
          <delta_ts>2021-10-27 10:03:58 -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>
          
          
          <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="Geza Lore">glore</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1807138</commentid>
    <comment_count>0</comment_count>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-10-21 07:56:06 -0700</bug_when>
    <thetext>[JSC][32bit] Use DataIC in Baseline JIT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807158</commentid>
    <comment_count>1</comment_count>
      <attachid>442029</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-10-21 08:27:46 -0700</bug_when>
    <thetext>Created attachment 442029
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807205</commentid>
    <comment_count>2</comment_count>
      <attachid>442042</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-10-21 09:26:31 -0700</bug_when>
    <thetext>Created attachment 442042
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807487</commentid>
    <comment_count>3</comment_count>
      <attachid>442042</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-21 18:23:01 -0700</bug_when>
    <thetext>Comment on attachment 442042
Patch

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

Nice. I&apos;ve commented. Since it has several things I would like to get anwsers, I put r-.

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:910
&gt; +    Jump branchIfNotObject(JSValueRegs cellJSR)
&gt; +    {
&gt; +        return branchIfNotObject(cellJSR.payloadGPR());
&gt; +    }

branchIfNotObject only accepts cellGPR. So we should not define JSValueRegs version. Let&apos;s remove this.

&gt; Source/JavaScriptCore/jit/GPRInfo.h:79
&gt; +    constexpr bool uses(GPRReg gpr) const { return m_gpr == gpr; }

We should ignore InvalidGPRReg.

if (gpr == InvalidGPRReg)
    return false;
return m_gpr == gpr;

&gt; Source/JavaScriptCore/jit/GPRInfo.h:214
&gt; +    constexpr bool uses(GPRReg gpr) const { return m_tagGPR == gpr || m_payloadGPR == gpr; }

We should ignore if gpr is InvalidGPRReg since 32bit JSValueReg can have payloadOnly, in which we only have payload GPR.

&gt; Source/JavaScriptCore/jit/JIT.h:340
&gt; +        void emitArrayProfilingSiteWithCell(const Bytecode&amp;, JSValueRegs cellJSR, RegisterID scratchGPR);

Since we only accept cell GPR, we should not use JSValueRegs here.
Let&apos;s take GPRReg cellGPR.

&gt; Source/JavaScriptCore/jit/JIT.h:342
&gt; +        void emitArrayProfilingSiteWithCell(const Bytecode&amp;, ptrdiff_t, JSValueRegs cellJSR, RegisterID scratchGPR);

Ditto.

&gt; Source/JavaScriptCore/jit/JITCall.cpp:137
&gt; +    // TODO: WHY THE DIFFERENCE??

WebKit does not use TODO. Please remove it.

&gt; Source/JavaScriptCore/jit/JITCall.cpp:478
&gt; +    using namespace BaselineGetByIdRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITCall.cpp:488
&gt; -    
&gt; -    constexpr GPRReg baseGPR = BaselineGetByIdRegisters::base;
&gt; -    constexpr GPRReg resultGPR = BaselineGetByIdRegisters::result;
&gt; -    constexpr GPRReg stubInfoGPR = BaselineGetByIdRegisters::stubInfo;
&gt;  
&gt; -    move(regT0, baseGPR);
&gt; -    emitJumpSlowCaseIfNotJSCell(baseGPR);
&gt; +    emitJumpSlowCaseIfNotJSCell(returnValueJSR);
&gt;  
&gt;      JITGetByIdGenerator gen(
&gt;          nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(BytecodeIndex(m_bytecodeIndex.offset())), RegisterSet::stubUnavailableRegisters(),
&gt; -        CacheableIdentifier::createFromImmortalIdentifier(ident-&gt;impl()), JSValueRegs(baseGPR), JSValueRegs(resultGPR), stubInfoGPR, AccessType::GetById);
&gt; +        CacheableIdentifier::createFromImmortalIdentifier(ident-&gt;impl()), returnValueJSR, resultJSR, stubInfoGPR, AccessType::GetById);
&gt;  

It looks like original 64bit code had baseGPR (and move was done), but it is removed. Can you recover that?
And we were using different registers for JITGetByIdGenerator&apos;s returnValueJSR, resultJSR previously.

&gt; Source/JavaScriptCore/jit/JITCall.cpp:517
&gt; +    notObject.append(branchIfNotObject(iteratorJSR));

We should pass iteratorJSR.payloadGPR() since we already know this is a cell.

&gt; Source/JavaScriptCore/jit/JITCall.cpp:564
&gt; +    using namespace BaselineGetByIdRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITCall.cpp:657
&gt; +    using namespace BaselineGetByIdRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITCall.cpp:674
&gt; +        notObject.append(branchIfNotObject(iterCallResultJSR));

We should pass iterCallResultJSR.payloadGPR() since we already know that this is a cell.

&gt; Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:132
&gt; +static void generateGetByIdInlineAccess(JIT&amp; jit, GPRReg stubInfoGPR, JSValueRegs baseJSR, GPRReg scratch, JSValueRegs resultJSR)

Let&apos;s name scratch scratchGPR.

&gt; Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:209
&gt; +    using namespace BaselinePutByIdRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:383
&gt; +    using namespace BaselineInByIdRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or, use like,

using BaselineInByIdRegisters::baseJSR;

&gt; Source/JavaScriptCore/jit/JITInlines.h:369
&gt; +inline void JIT::emitArrayProfilingSiteWithCell(const Bytecode&amp; bytecode, ptrdiff_t offsetOfArrayProfile, JSValueRegs cellJSR, RegisterID scratchGPR)

We should take GPRReg instead of JSValueRegs.

&gt; Source/JavaScriptCore/jit/JITInlines.h:378
&gt; +inline void JIT::emitArrayProfilingSiteWithCell(const Bytecode&amp; bytecode, JSValueRegs cellJSR, RegisterID scratchGPR)

We should take GPRReg instead of JSValueRegs.

&gt; Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:155
&gt; +    using namespace BaselineInstanceofRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:55
&gt; +    using namespace BaselineGetByValRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:62
&gt; +        emitArrayProfilingSiteWithCell(bytecode, baseJSR, scratchGPR);

We should pass baseJSR.payloadGPR() here since it only accepts Cell GPR.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:68
&gt; +        emitArrayProfilingSiteWithCell(bytecode, baseJSR, scratchGPR);

We should pass baseJSR.payloadGPR() here since it only accepts Cell GPR.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:113
&gt; +    constexpr GPRReg scratchGPR = preferredArgumentGPR&lt;SlowOperation, 2&gt;();

Let&apos;s name it profileGPR.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:122
&gt; +    materializePointerIntoMetadata(bytecode, OpcodeType::Metadata::offsetOfArrayProfile(), scratchGPR);

Ditto. profileGPR.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:209
&gt; +    using namespace BaselineGetByValRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:331
&gt; +    using namespace BaselinePrivateBrandRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:394
&gt; +    constexpr GPRReg propertyGPR = BaselinePrivateBrandRegisters::brandJSR.payloadGPR();

We should rename it to brandGPR.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:396
&gt;      static_assert(propertyGPR == argumentGPR1);

Ditto.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:413
&gt; +    using namespace BaselinePrivateBrandRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:491
&gt; +    using namespace BaselinePutByValRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:498
&gt; +    emitArrayProfilingSiteWithCell(bytecode, baseJSR, profileGPR);

We should pass baseJSR.payloadGPR().

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:573
&gt; +    emitGetVirtualRegister(base, baseJSR);
&gt; +    emitGetVirtualRegister(property, propertyJSR);
&gt; +    emitGetVirtualRegister(value, valueJSR);

Let&apos;s move these things after `materializePointerIntoMetadata` related thing to make it aligned to the other code for the slow path.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:659
&gt; +    using namespace BaselinePutByValRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:713
&gt; +    loadConstant(gen.m_unlinkedStubInfoConstantIndex, stubInfoGPR);

Let&apos;s load constant registers first before emitGetVirtualRegisters (just after loadGlobalObject) to align it to the other places.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:839
&gt; +    using namespace BaselineDelByIdRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:970
&gt; +    using namespace BaselineDelByValRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1104
&gt; +    using namespace BaselineGetByIdRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1186
&gt; +    using namespace BaselineGetByIdRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1233
&gt; +        Address(argumentGPR1, StructureStubInfo::offsetOfSlowOperation()),

Let&apos;s use stubInfoGPR instead of argumentGPR1.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1270
&gt; +    using namespace BaselineGetByIdRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1278
&gt; +        emitArrayProfilingSiteWithCell(bytecode, OpGetById::Metadata::offsetOfModeMetadata() + GetByIdModeMetadataArrayLength::offsetOfArrayProfile(), baseJSR, scratchGPR);

We should pass baseJSR.payloadGPR().

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1362
&gt; +    using namespace BaselineGetByIdWithThisRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1455
&gt; +        Address(argumentGPR1, StructureStubInfo::offsetOfSlowOperation()),

Let&apos;s use stubInfoGPR instead of argumentGPR1.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1541
&gt; +    using namespace BaselinePutByIdRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1669
&gt; +    using namespace BaselineInByIdRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1752
&gt; +    using namespace BaselineInByValRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1757
&gt; +    emitArrayProfilingSiteWithCell(bytecode, baseJSR, scratchGPR);

We should pass baseJSR.payloadGPR().

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1837
&gt; +    using namespace BaselineInByValRegisters;

We are not encouraging `using namespace`. Let&apos;s define baseJSR etc. as the same way to the above old code.
Or using (not using namespace).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:3174
&gt; +    emitArrayProfilingSiteWithCell(bytecode, JSValueRegs { baseGPR }, scratch1);

We should pass baseGPR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807602</commentid>
    <comment_count>4</comment_count>
      <attachid>442137</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-10-22 02:32:22 -0700</bug_when>
    <thetext>Created attachment 442137
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807604</commentid>
    <comment_count>5</comment_count>
      <attachid>442042</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-10-22 02:33:51 -0700</bug_when>
    <thetext>Comment on attachment 442042
Patch

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

&gt;&gt; Source/JavaScriptCore/jit/JITCall.cpp:488
&gt;&gt;  
&gt; 
&gt; It looks like original 64bit code had baseGPR (and move was done), but it is removed. Can you recover that?
&gt; And we were using different registers for JITGetByIdGenerator&apos;s returnValueJSR, resultJSR previously.

returnValueJSR is generic and defined at the top of the file as the JSValueRegs holding the ABI return value register/registers. We want to pass the result of the function call above to the IC generator, which happen to be in returnValueGPR (ABI), which also happens to be the same as regT0 (GPRInfo.h), and baseGPR also was defined to regT0 (JITInlineCacheGenerator.h), so that move emitted nothing and it was just a roundabout way of saying pass in the return value of the previous function call that I can&apos;t see there is a need for.

With that in mind, I left this in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807605</commentid>
    <comment_count>6</comment_count>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-10-22 02:34:29 -0700</bug_when>
    <thetext>All other requested changes are done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807977</commentid>
    <comment_count>7</comment_count>
      <attachid>442137</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-22 17:28:42 -0700</bug_when>
    <thetext>Comment on attachment 442137
Patch

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

r=me with comment.

&gt; Source/JavaScriptCore/jit/JITCall.cpp:-415
&gt; -    emitJumpSlowCaseIfNotJSCell(baseGPR);

We should insert `static_assert(BaselineGetByIdRegisters::baseJSR == BaselineGetByIdRegisters::resultJSR);`.
We have baseJSR. And it is possible that we will change baseJSR while keeping resultJSR value.
Then, it is wrong that this code&apos;s base value register is not changed. To notice that we are using returnValueJSR here instead, we should put static_assert so that compilation error will happen.
baseJSR and resultJSR are the same, but this is not guaranteed thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808332</commentid>
    <comment_count>8</comment_count>
      <attachid>442355</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-10-25 03:32:44 -0700</bug_when>
    <thetext>Created attachment 442355
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808379</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-25 06:55:10 -0700</bug_when>
    <thetext>Committed r284781 (243490@main): &lt;https://commits.webkit.org/243490@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 442355.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808380</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-25 06:56:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/84612428&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808981</commentid>
    <comment_count>11</comment_count>
      <attachid>442355</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-10-26 12:32:01 -0700</bug_when>
    <thetext>Comment on attachment 442355
Patch

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

Nice, LGTM too. This patch is great

&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:309
&gt; +        // FIXME: This scratch register is not generally safe to use on ARMv7, as the macro
&gt; +        //        assembler always assumes it is available. At the moment, it does happen to work
&gt; +        //        with the code below.

this is the same for all the macro assemblers, hence the DisallowMacroScratchRegisterUsage scope. Don&apos;t think we need a FIXME here

&gt; Source/JavaScriptCore/jit/CCallHelpers.h:874
&gt; +    template &lt;typename OperationType, unsigned ArgNum, unsigned Index = ArgNum, typename... Args&gt;
&gt; +    static constexpr JSValueRegs pickJSR(GPRReg first, Args... rest)
&gt; +    {
&gt; +        static_assert(sizeOfArg&lt;OperationType, ArgNum - Index&gt;() &lt;= 8, &quot;Don&apos;t know how to handle large arguments&quot;);
&gt; +        if constexpr (!Index)
&gt; +            return JSValueRegs { first };
&gt; +        else {
&gt; +            UNUSED_PARAM(first); // Otherwise warning due to constexpr
&gt; +            return pickJSR&lt;OperationType, ArgNum, Index - 1&gt;(rest...);
&gt; +        }
&gt; +    }

can&apos;t this just construct a tuple and return std::get&lt;Index&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809220</commentid>
    <comment_count>12</comment_count>
      <attachid>442355</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-10-27 04:34:53 -0700</bug_when>
    <thetext>Comment on attachment 442355
Patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:309
&gt;&gt; +        //        with the code below.
&gt; 
&gt; this is the same for all the macro assemblers, hence the DisallowMacroScratchRegisterUsage scope. Don&apos;t think we need a FIXME here

My comment is probably obtuse, but the reason this is unsafe is precisely because the ARMv7 macro assembler ignores DisallowMacroScratchRegisterUsage. If you look in MacroAssemblerARMv7.h, it unconditionally uses the &apos;dataTempRegister&apos; all over without ever checking the m_allowScratchRegister flag, hence the FIXME. Same applies to MIPS and RISCV64. ARM64/ARM64E and x86 are OK.

&gt;&gt; Source/JavaScriptCore/jit/CCallHelpers.h:874
&gt;&gt; +    }
&gt; 
&gt; can&apos;t this just construct a tuple and return std::get&lt;Index&gt;?

I think this one (the JSVALUE64 version only) could, I admit I have not thought of that as I was thinking of the more generic algorithm that works for JSVALUE32_64 as well where you need to cherry pick your register in a more peculiar way when passing 64-bit values. The JSVALUE64 version is just a simplified version of that which indeed appears to be identical to the std::tuple method.

Maybe it is better to keep the two platforms to use the same algorithm structure so it&apos;s easier on the next reader of the JSVALUE32_64 code that is perhaps less obvious?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809296</commentid>
    <comment_count>13</comment_count>
      <attachid>442355</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-10-27 10:03:58 -0700</bug_when>
    <thetext>Comment on attachment 442355
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:309
&gt;&gt;&gt; +        //        with the code below.
&gt;&gt; 
&gt;&gt; this is the same for all the macro assemblers, hence the DisallowMacroScratchRegisterUsage scope. Don&apos;t think we need a FIXME here
&gt; 
&gt; My comment is probably obtuse, but the reason this is unsafe is precisely because the ARMv7 macro assembler ignores DisallowMacroScratchRegisterUsage. If you look in MacroAssemblerARMv7.h, it unconditionally uses the &apos;dataTempRegister&apos; all over without ever checking the m_allowScratchRegister flag, hence the FIXME. Same applies to MIPS and RISCV64. ARM64/ARM64E and x86 are OK.

Yeah, we should make DisallowMacroScratchRegisterUsage a thing for those assemblers.

&gt;&gt;&gt; Source/JavaScriptCore/jit/CCallHelpers.h:874
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; can&apos;t this just construct a tuple and return std::get&lt;Index&gt;?
&gt; 
&gt; I think this one (the JSVALUE64 version only) could, I admit I have not thought of that as I was thinking of the more generic algorithm that works for JSVALUE32_64 as well where you need to cherry pick your register in a more peculiar way when passing 64-bit values. The JSVALUE64 version is just a simplified version of that which indeed appears to be identical to the std::tuple method.
&gt; 
&gt; Maybe it is better to keep the two platforms to use the same algorithm structure so it&apos;s easier on the next reader of the JSVALUE32_64 code that is perhaps less obvious?

I don&apos;t have a strong preference. I think it&apos;s fine to leave it as is.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442029</attachid>
            <date>2021-10-21 08:27:46 -0700</date>
            <delta_ts>2021-10-21 09:31:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232079-20211021162744.patch</filename>
            <type>text/plain</type>
            <size>228546</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NjA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NWVlMmU1ZDFiYmY1MDA5OWY5YzkwMGFiZGU4NTRlYWJmNjIxNGFhLi5lYzEzNjEzNWRhYzM0YmI3
M2M0NTZmOTA4N2UzZDQxODM4YzQ5NjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjYgQEAKKzIwMjEtMTAtMjEgIEdlemEgTG9yZSAgPGdlemFsb3JlQGdtYWlsLmNvbT4K
KworICAgICAgICBbSlNDXVszMmJpdF0gVXNlIERhdGFJQyBpbiBCYXNlbGluZSBKSVQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjA3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcG9y
dHMgdGhlIEpTVkFMVUUzMl82NCBiYXNlbGluZSBKSVQgdG8gdXNlIERhdGFJQ3MuCisKKyAgICAg
ICAgVGhlIG1ham9yaXR5IG9mIHRoZSBpbnZvbHZlZCBvcGNvZGVzIChhbGwgYnV0IG9uZSkgY291
bGQgYmUgZWFzaWx5CisgICAgICAgIG1vZGlmaWVkIHRvIHVzZSBhIGNvbW1vbiBpbXBsZW1lbnRh
dGlvbiBiZXR3ZWVuIEpTVkFMVUU2NCBhbmQKKyAgICAgICAgSlNWQUxVRTMyXzY0IHBsYXRmb3Jt
cyBieSBhYnN0cmFjdGluZyBvdmVyIG1hY2hpbmUgcmVnaXN0ZXJzIGhvbGRpbmcgYQorICAgICAg
ICBKU1ZhbHVlIHVzaW5nIEpTVmFsdWVSZWcgdHlwZXMgaW5zdGVhZCBvZiBHUFJSZWcuCisKKyAg
ICAgICAgVGhlIG9ubHkgbm9uLXRyaXZpYWwgYWRkaXRpb25hbCBhYnN0cmFjdGlvbiBuZWVkZWQg
d2FzIG92ZXIgdGhlIGlkZWFsCisgICAgICAgIGFyZ3VtZW50IHJlZ2lzdGVycyB1c2VkIGluIGEg
ZnVuY3Rpb24gY2FsbCwgc28gbG9hZGluZyB0aGUgYXJndW1lbnRzCisgICAgICAgIGZyb20gbWVt
b3J5IGNhbiBwdXQgdGhlbSBzdHJhaWdodCBpbiB0aGUgQUJJIHNwZWNpZmljIGFyZ3VtZW50Cisg
ICAgICAgIHJlZ2lzdGVyIHdoZW5ldmVyIHBvc3NpYmxlLCBvciBhcHByb3ByaWF0ZSB0ZW1wb3Jh
cmllcyBvdGhlcndpc2UuIEZvcgorICAgICAgICB0aGlzIEkgYWRkZWQgQ0NhbGxIZWxwZXJzOjpw
cmVmZXJyZWRBcmd1bWVudEdQUiAoZm9yIHBhc3NpbmcgaG9zdAorICAgICAgICBwb2ludGVycyBh
bmQgb3RoZXIgcHJpbWl0aXZlIHR5cGVzIHRoYXQgZml0IGluIGEgbWFjaGluZSByZWdpc3RlciBv
bgorICAgICAgICB0aGUgaG9zdCBwbGF0Zm9ybSksIGFuZCBDQ2FsbEhlbHBlcnM6OnByZWZlcnJl
ZEFyZ3VtZW50SlNSIChmb3IKKyAgICAgICAgcGFzc2luZyBKU1ZhbHVlL0VuY29kZWRKU1ZhbHVl
KS4gUGxlYXNlIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlc2UKKyAgICAgICAgaW4gdGhlIGNv
ZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2Vt
Ymxlci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6c3RyYik6CisgICAgICAgICog
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpl
bWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlD
RmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90T2JqZWN0KToKKyAgICAgICAgKiBq
aXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6c2l6ZU9mQXJn
KToKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjpwaWNrSlNSKToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpwcmVmZXJyZWRBcmd1bWVudEpTUik6CisgICAgICAgIChKU0M6OkNDYWxs
SGVscGVyczo6cHJlZmVycmVkQXJndW1lbnRHUFIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVT
aHVmZmxlci5oOgorICAgICAgICAqIGppdC9HUFJJbmZvLmg6CisgICAgICAgIChKU0M6OkpTVmFs
dWVSZWdzOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVJlZ3M6Om9w
ZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUmVnczo6dGFnR1BSIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVJlZ3M6OnBheWxvYWRHUFIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpKU1ZhbHVlUmVnczo6dXNlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWVS
ZWdzOjpvdmVybGFwcyBjb25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWVSZWdzOjpKU1ZhbHVl
UmVncyk6CisgICAgICAgIChKU0M6OkpTVmFsdWVSZWdzOjpwYXlsb2FkT25seSk6CisgICAgICAg
ICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluZyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJ
VC5oOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
b3Blbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMy
XzY0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlND
OjpKSVRDb2RlOjp1c2VEYXRhSUMpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlR2V0QnlJZElubGluZUFjY2Vzcyk6Cisg
ICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6
SklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAgICAqIGppdC9KSVRJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwpOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVj
a19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19w
cml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNs
b3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9kZWxfYnlf
aWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlf
Z2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRIYXNQcml2YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZVNsb3cpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAg
ICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisKIDIwMjEtMTAtMjAgIFl1c3Vr
ZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICAqSXNTYW5lIEFQSSdzIGNv
dWxkIHRha2UgaW4gdGhlIFN0cnVjdHVyZSdzIHdlJ3JlIGNvbnN1bHRpbmcsIG9yIHRoZXkgY2Fu
IGJlIG91dCBwYXJhbWV0ZXJzLCBzbyB3ZSBkb24ndCByZWx5IG9uIHRoZSBDUFUncyBtZW1vcnkg
b3JkZXJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2RmM2E2MTg2ZjYzZjgz
NDQyZGYxN2NlMjkzNDIwNDI4OTNmMmJkZi4uZWM1NmMxMGVhYTBlNGYwNmEyZTMwZTNhYWI2NDZh
MGYwZGJiNjhjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM0NDYsNyArMzQ0
Niw2IEBACiAJCTE0NkFBQjM3MEI2NkE5NDQwMEU1NUYxNiAvKiBKU1N0cmluZ1JlZkNGLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ1JlZkNGLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ2QjE0REIxMkVCNUIxMjAwMUJFQzFCIC8q
IENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbnNlcnZhdGl2ZVJvb3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQ2RkE1QTgxMzc4RjZCMDAwMzYyN0EzIC8qIEhhbmRsZVR5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhhbmRsZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTE0NkZFNTExMTFBNzEwNDMwMDg3QUU2NiAvKiBKSVRDYWxsMzJfNjQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQ2FsbDMyXzY0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3MTQ4MkUyMEQzMjM2NDAwOTBFNjMwIC8qIEpTV3Jh
cHBlck1hcFRlc3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV3JhcHBl
ck1hcFRlc3RzLmg7IHBhdGggPSBBUEkvdGVzdHMvSlNXcmFwcGVyTWFwVGVzdHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3MTQ4MkYyMEQzMjM2NTAwOTBFNjMwIC8qIEpTV3Jh
cHBlck1hcFRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
SlNXcmFwcGVyTWFwVGVzdHMubW07IHBhdGggPSBBUEkvdGVzdHMvSlNXcmFwcGVyTWFwVGVzdHMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NzM0MUNCMURDMDJENzIwMEFBMjlC
QSAvKiBFeGVjdXRhYmxlQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
eGVjdXRhYmxlQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM2NSw3ICs2
MzY0LDYgQEAKIAkJCQlGRTNBMDZBRjFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0WG9yR2VuZXJh
dG9yLmNwcCAqLywKIAkJCQlGRTNBMDZCMDFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0WG9yR2Vu
ZXJhdG9yLmggKi8sCiAJCQkJODZDQzg1QTIwRUU3OUI3NDAwMjg4NjgyIC8qIEpJVENhbGwuY3Bw
ICovLAotCQkJCTE0NkZFNTExMTFBNzEwNDMwMDg3QUU2NiAvKiBKSVRDYWxsMzJfNjQuY3BwICov
LAogCQkJCTBGOEY5NDQzMTY2NzYzNTIwMEQ2MTk3MSAvKiBKSVRDb2RlLmNwcCAqLywKIAkJCQk4
NkNDRUZERDBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5oICovLAogCQkJCTBGRkI4MEJCMjBB
Nzk0NzAwMDA2QUFGNiAvKiBKSVRDb2RlSW5saW5lcy5oICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IGUwZTIzYTJmMzZjMTI1ZTk2N2YwZWZhNWM0ZDliOThkYTg4Y2VjMTMuLmRk
OGNiNjI3MjQxYmU4OGNlZWYwNzQ1OWM4NWVmM2M4YTlmOGM4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQKQEAgLTY0Miw3ICs2NDIsNiBAQCBqaXQvSklUQml0QW5kR2VuZXJhdG9yLmNw
cAogaml0L0pJVEJpdE9yR2VuZXJhdG9yLmNwcAogaml0L0pJVEJpdFhvckdlbmVyYXRvci5jcHAK
IGppdC9KSVRDYWxsLmNwcAotaml0L0pJVENhbGwzMl82NC5jcHAKIGppdC9KSVRDb2RlLmNwcAog
aml0L0pJVENvbXBpbGF0aW9uLmNwcAogaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCmluZGV4IDFj
OGNkMGNlNGZkODIxYThiODkzNDVlNDc5ZGJjZDlmNTMxNDRiNzkuLmIxMjY1Mzg1YTVkNzM5Njdl
ZDVlOTA5NDgyMjA5ZWRkYjRmNDI0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKQEAgLTE1NjUsOCArMTU2NSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKHJuICE9IEFSTVJlZ2lzdGVyczo6cGMpOwogICAgICAgICBBU1NFUlQo
aW1tLmlzVUludDEyKCkpOwogCi0gICAgICAgIGlmICghKChydCB8IHJuKSAmIDgpICYmIGltbS5p
c1VJbnQ3KCkpCi0gICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A1SW1tNVJlZzNSZWcz
KE9QX1NUUkJfaW1tX1QxLCBpbW0uZ2V0VUludDcoKSA+PiAyLCBybiwgcnQpOworICAgICAgICBp
ZiAoISgocnQgfCBybikgJiA4KSAmJiBpbW0uaXNVSW50NSgpKQorICAgICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lV29yZE9wNUltbTVSZWczUmVnMyhPUF9TVFJCX2ltbV9UMSwgaW1tLmdldFVJbnQ1
KCksIHJuLCBydCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dv
cmRPcDEyUmVnNFJlZzRJbW0xMihPUF9TVFJCX2ltbV9UMiwgcm4sIHJ0LCBpbW0uZ2V0VUludDEy
KCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAKaW5kZXggNjYzYmY5OTlmZDQ3ZjhmMzEzZTA0NjNkNmJkYzZlY2VmNGY4MDk1NC4u
MDYzY2E4MmRkNWI5ZWQ2OWIyYjkwYjQ0MzQzYzU3OGMyNDE3YjcwMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKQEAgLTMwNCw4ICszMDQs
MTEgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRo
SW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW4KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOwogCiAgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VEYXRhSUM6OlllcykgeworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzY3JhdGNoIHJlZ2lzdGVyIGlzIG5vdCBnZW5lcmFsbHkgc2Fm
ZSB0byB1c2Ugb24gQVJNdjcsIGFzIHRoZSBtYWNybworICAgICAgICAvLyAgICAgICAgYXNzZW1i
bGVyIGFsd2F5cyBhc3N1bWVzIGl0IGlzIGF2YWlsYWJsZS4gQXQgdGhlIG1vbWVudCwgaXQgZG9l
cyBoYXBwZW4gdG8gd29yaworICAgICAgICAvLyAgICAgICAgd2l0aCB0aGUgY29kZSBiZWxvdy4K
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7Ci0gICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNh
bGxvd1NjcmF0Y2goaml0KTsKQEAgLTM2NSw5ICszNjgsNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCwgRwogTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZh
bGlkR1BSUmVnKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIFVzZXMgRGF0YUlDCi0jZW5kaWYKICAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUM6OlllcywgZmFsc2UsIG51bGxwdHIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAppbmRleCA2YWI0Y2ViNGI2YTUw
NGM0ODI2NGQ1MmQxZDE1ODFiZTZhNTkwYTMwLi5mZDM0YmVjY2ZmMmIwZThiNjQ2ZGNjNzBlNGMy
YzM4OGRlNTQ1Y2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKQEAgLTQzNCw3ICs0MzQsNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNldENhY2hlVHlwZShjb25zdCBDb25jdXJyZW50SlNM
b2NrZXJCYXNlJgogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byYgdW5saW5rZWRTdHViSW5mbykKIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGFjY2Vzc1R5
cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CiAgICAgc3RhcnQgPSB1bmxpbmtlZFN0
dWJJbmZvLnN0YXJ0OwogICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxv
Y2F0aW9uOwpAQCAtNDQ1LDggKzQ0NCw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRp
YWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpCiAKICAg
ICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
OwogICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRT
dHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgewotICAgICAgICAvLyBGb3IgaXRl
cmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJl
Z2lzdGVyIGVpdGhlci4KLSAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9y
X25leHQsIHdlIGNhbid0IGNsb2JiZXIgdGhlICJkb250Q2xvYmJlckpTUiIgcmVnaXN0ZXIgZWl0
aGVyLgorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmRvbnRDbG9iYmVySlNSKTsKICAgICB9CiAKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKQEAg
LTQ4MCwxMyArNDc5LDEzIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9t
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpCiAgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CiAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVOYW1lOgogICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFt
ZU9wdGltaXplOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVCcmFuZDogCiAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVC
cmFuZE9wdGltaXplOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFBy
aXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgogICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CkBAIC01NDMsOTYgKzU0
MiwxNTIgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGkKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUp
IHsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgogICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSBmYWxzZTsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxS
ZWdpc3RlcnM6OmJhc2U7Ci0gICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURl
bEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAgICAgICByZWdzLnByb3Bl
cnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHlKU1IucGF5bG9hZEdQ
UigpOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dEpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAg
ICBiYXNlVGFnR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUi50YWdHUFIo
KTsKKyAgICAgICAgdi5wcm9wZXJ0eVRhZ0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5SlNSLnRhZ0dQUigpOworICAgICAgICB2YWx1ZVRhZ0dQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdEpTUi50YWdHUFIoKTsKKyNlbmRpZgogICAgICAgICBicmVh
azsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CiAgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IHRydWU7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6
OmJhc2VKU1IucGF5bG9hZEdQUigpOwogICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxp
ZEdQUlJlZzsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHRKU1IucGF5bG9hZEdQUigpOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
ICAgICBiYXNlVGFnR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQ
UigpOworICAgICAgICB2LnByb3BlcnR5VGFnR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
dmFsdWVUYWdHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUi50YWdHUFIo
KTsKKyNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
OgogICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CiAgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IGZhbHNlOwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKLSAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHJlZ3MucHJv
cGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2Fk
R1BSKCk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0SlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
ICAgIGJhc2VUYWdHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQ
UigpOworICAgICAgICB2LnByb3BlcnR5VGFnR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHlKU1IudGFnR1BSKCk7CisgICAgICAgIHZhbHVlVGFnR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0SlNSLnRhZ0dQUigpOworI2VuZGlmCiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKICAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gZmFsc2U7CiAgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBm
YWxzZTsKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKICAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOwogICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZh
bHVlSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnJlc3VsdEdQUjsKKyAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm9HUFI7
CisgICAgICAgIGJhc2VUYWdHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2YWx1ZVRhZ0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHYucHJvcGVydHlUYWdHUFIgPSBJbnZhbGlkR1BS
UmVnOworI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZh
bDoKICAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKICAgICBjYXNlIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCiAgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IGZhbHNlOwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OwotICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJl
c3VsdDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJh
c2VKU1IucGF5bG9hZEdQUigpOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHRKU1IucGF5bG9hZEdQUigpOwor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
b0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBiYXNlVGFnR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQUigpOworICAgICAgICB2LnByb3BlcnR5
VGFnR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi50YWdHUFIoKTsK
KyAgICAgICAgdmFsdWVUYWdHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdEpT
Ui50YWdHUFIoKTsKKyNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlJZDoKICAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKICAgICAgICAg
cmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxp
bmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAgICAgdi50aGlzVGFnR1BSID0gSW52YWxpZEdQUlJlZzsKKyAg
ICAgICAgYmFzZVRhZ0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQ
UigpOworICAgICAgICB2YWx1ZVRhZ0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1
bHRKU1IudGFnR1BSKCk7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NU
eXBlOjpUcnlHZXRCeUlkOgogICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKICAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CiAgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IHRydWU7CiAgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAg
ICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUi5wYXls
b2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHYudGhpc1Rh
Z0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VUYWdHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2VKU1IudGFnR1BSKCk7CisgICAgICAgIHZhbHVlVGFnR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHRKU1IudGFnR1BSKCk7CisjZW5kaWYKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CiAgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OwotICAgICAgICByZWdzLnRoaXNH
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwotICAgICAg
ICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHRKU1IucGF5bG9hZEdQUigpOworICAgICAgICByZWdz
LnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc0pTUi5wYXls
b2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAg
YmFzZVRhZ0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlSlNSLnRh
Z0dQUigpOworICAgICAgICB2YWx1ZVRhZ0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVn
aXN0ZXJzOjpyZXN1bHRKU1IudGFnR1BSKCk7CisgICAgICAgIHYudGhpc1RhZ0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzSlNSLnRhZ0dQUigpOworI2VuZGlmCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKICAgICAgICAgaGFz
Q29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKICAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxp
ZEdQUlJlZzsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOwot
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZUpTUi5w
YXlsb2FkR1BSKCk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
Ojp2YWx1ZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgICAgIHYudGhpc1RhZ0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VUYWdHUFIg
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IudGFnR1BSKCk7CisgICAgICAgIHZh
bHVlVGFnR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZUpTUi50YWdHUFIoKTsK
KyNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgog
ICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CiAgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IGZhbHNlOwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKLSAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnZhbHVlOwotICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgcmVncy5wcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBheWxvYWRHUFIo
KTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZUpT
Ui5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKICAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNz
VHlwZTo6UHV0QnlWYWwpCi0gICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGVHUFI7CisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgYmFzZVRhZ0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OmJhc2VKU1IudGFnR1BSKCk7CisgICAgICAgIHYucHJvcGVydHlUYWdHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi50YWdHUFIoKTsKKyAgICAgICAgdmFsdWVUYWdH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZUpTUi50YWdHUFIoKTsKKyNlbmRp
ZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoK
ICAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgogICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSBmYWxzZTsKICAgICAgICAgdmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVn
OwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7
Ci0gICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YnJhbmQ7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmRKU1IucGF5bG9hZEdQUigpOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJ
bmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHZhbHVlVGFnR1BSID0gSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZVRhZ0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpiYXNlSlNSLnRhZ0dQUigpOworICAgICAgICB2LmJyYW5kVGFnR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kSlNSLnRhZ0dQUigpOworI2VuZGlmCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHVubGlua2VkU3R1Yklu
Zm8pOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCiB9CiAKICNpZiBBU1NFUlRf
RU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5k
ZXggMjQ0ZjIyMjc5MmM3MGY4MWFkMDc3MTA3YTE2NjMzMmRjNzMxZWYwZi4uZGMwNGVmOTEwOTEw
MGFmMTNlMTY1ZDU2NjhmYzZlMGY3Mzk0ZTQxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC05MDQsNiArOTA0LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIEJlbG93LCBBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNo
SWZOb3RPYmplY3QoSlNWYWx1ZVJlZ3MgY2VsbEpTUikKKyAgICB7CisgICAgICAgIHJldHVybiBi
cmFuY2hJZk5vdE9iamVjdChjZWxsSlNSLnBheWxvYWRHUFIoKSk7CisgICAgfQorCiAgICAgLy8g
Tm90ZSB0aGF0IGZpcnN0IGFuZCBsYXN0IGFyZSBpbmNsdXNpdmUuCiAgICAgSnVtcCBicmFuY2hJ
ZlR5cGUoR1BSUmVnIGNlbGxHUFIsIEpTVHlwZVJhbmdlIHJhbmdlKQogICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCmluZGV4IDRiZDZlNmM4ODZmNTNkYWRhNjc2
Nzk2MDFiNjAwN2E5ZjE5MWNlMDYuLjljYjgyYzdlMTFhOGU4MDdlY2Q4ZDZjMWRkZDYzMTExMGEz
NjFjZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaApAQCAtODUy
LDYgKzg1MiwxNDYgQEAgcHVibGljOgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tl
dChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BS
UmVnIHNjcmF0Y2gyKTsKIAogICAgIHN0YXRpYyB2b2lkIGVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUsIFNjb3BlZExhbWJkYTx2b2lk
KENDYWxsSGVscGVycyYpPiwgY29uc3QgY2hhciopOworCitwcml2YXRlOgorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBBcmdOdW0+CisgICAgc3RhdGljIGNv
bnN0ZXhwciBzdGQ6OmVuYWJsZV9pZl90PChGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6
YXJpdHkgPiBBcmdOdW0pLCBzaXplX3Q+IHNpemVPZkFyZygpCisgICAgeworICAgICAgICByZXR1
cm4gc2l6ZW9mKHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+Ojp0ZW1wbGF0
ZSBBcmd1bWVudFR5cGU8QXJnTnVtPik7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgQXJnTnVtLCB1bnNp
Z25lZCBJbmRleCA9IEFyZ051bSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHBpY2tKU1IoR1BSUmVnIGZpcnN0LCBBcmdzLi4uIHJlc3QpCisgICAg
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVPZkFyZzxPcGVyYXRpb25UeXBlLCBBcmdOdW0g
LSBJbmRleD4oKSA8PSA4LCAiRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGxhcmdlIGFyZ3VtZW50
cyIpOworICAgICAgICBpZiBjb25zdGV4cHIgKCFJbmRleCkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlUmVncyB7IGZpcnN0IH07CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVU5VU0VE
X1BBUkFNKGZpcnN0KTsgLy8gT3RoZXJ3aXNlIHdhcm5pbmcgZHVlIHRvIGNvbnN0ZXhwcgorICAg
ICAgICAgICAgcmV0dXJuIHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJnTnVtLCBJbmRleCAtIDE+
KHJlc3QuLi4pOworICAgICAgICB9CisgICAgfQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgQXJnTnVtLCB1bnNp
Z25lZCBJbmRleCA9IEFyZ051bSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHBpY2tKU1IoR1BSUmVnIGZpcnN0LCBHUFJSZWcgc2Vjb25kLCBHUFJS
ZWcgdGhpcmQsIEFyZ3MuLi4gcmVzdCkKKyAgICB7CisgICAgICAgIGNvbnN0ZXhwciBzaXplX3Qg
c2l6ZU9mQ3VycmVudEFyZyA9IHNpemVPZkFyZzxPcGVyYXRpb25UeXBlLCBBcmdOdW0gLSBJbmRl
eD4oKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplT2ZDdXJyZW50QXJnIDw9IDgsICJEb24n
dCBrbm93IGhvdyB0byBoYW5kbGUgbGFyZ2UgYXJndW1lbnRzIik7CisgICAgICAgIGlmIGNvbnN0
ZXhwciAoIUluZGV4KSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHNpemVPZkN1cnJlbnRB
cmcgPD0gNCkgeworICAgICAgICAgICAgICAgIC8vIEZpdHMgaW4gc2luZ2xlIEdQUgorICAgICAg
ICAgICAgICAgIFVOVVNFRF9QQVJBTShzZWNvbmQpOyAvLyBPdGhlcndpc2Ugd2FybmluZyBkdWUg
dG8gY29uc3RleHByCisgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHRoaXJkKTsgLy8gT3Ro
ZXJ3aXNlIHdhcm5pbmcgZHVlIHRvIGNvbnN0ZXhwcgorICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoZmlyc3QpOworICAgICAgICAgICAgfSBlbHNlIGlmIChm
aXJzdCA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjEgJiYgc2Vjb25kID09IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiAmJiB0aGlyZCA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjMpIHsKKyAgICAgICAgICAg
ICAgICAvLyBXaWRlIGFyZ3VtZW50IHBhc3NlZCBpbiBHUFJzIG5lZWRzIHRvIHN0YXJ0IHdpdGgg
ZXZlbiByZWdpc3RlciBudW1iZXIsIHNvIHNraXAgYXJndW1lbnRHUFIxCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWVSZWdzIHsgdGhpcmQsIHNlY29uZCB9OworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBpcyBlaXRoZXIgYW4gZXZlbiByZWdpc3Rl
ciwgb3IgdGhpcyBhcmd1bWVudCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgc3RhY2ssIHNvIGl0IGRv
ZXMgbm90IG1hdHRlcgorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyB7IHNlY29u
ZCwgZmlyc3QgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmIGNvbnN0ZXhwcihzaXplT2ZDdXJyZW50QXJnIDw9IDQpIHsKKyAgICAgICAgICAgICAgICAv
LyBGaXRzIGluIHNpbmdsZSBHUFIKKyAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0oZmlyc3Qp
OyAvLyBPdGhlcndpc2Ugd2FybmluZyBkdWUgdG8gY29uc3RleHByCisgICAgICAgICAgICAgICAg
cmV0dXJuIHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJnTnVtLCBJbmRleCAtIDE+KHNlY29uZCwg
dGhpcmQsIHJlc3QuLi4pOworICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdCA9PSBHUFJJbmZv
Ojphcmd1bWVudEdQUjEgJiYgc2Vjb25kID09IEdQUkluZm86OmFyZ3VtZW50R1BSMiAmJiB0aGly
ZCA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjMpIHsKKyAgICAgICAgICAgICAgICAvLyBXaWRlIGFy
Z3VtZW50IHBhc3NlZCBpbiBHUFJzIG5lZWRzIHRvIHN0YXJ0IHdpdGggZXZlbiByZWdpc3RlciBu
dW1iZXIsIHNvIHNraXAgYXJndW1lbnRHUFIxLCBidXQgcmV1c2UgaXQgbGF0ZXIKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcGlja0pTUjxPcGVyYXRpb25UeXBlLCBBcmdOdW0sIEluZGV4IC0gMT4o
Zmlyc3QsIHJlc3QuLi4pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBGaXJzdCBpcyBlaXRoZXIgYW4gZXZlbiByZWdpc3Rlciwgb3IgdGhpcyBhcmd1bWVudCB3aWxs
IGJlIHB1c2hlZCB0byB0aGUgc3RhY2ssIHNvIGl0IGRvZXMgbm90IG1hdHRlcgorICAgICAgICAg
ICAgICAgIHJldHVybiBwaWNrSlNSPE9wZXJhdGlvblR5cGUsIEFyZ051bSwgSW5kZXggLSAxPih0
aGlyZCwgcmVzdC4uLik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgQXJnTnVtLCB1bnNpZ25l
ZCBJbmRleCA9IEFyZ051bSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3RleHBy
IEpTVmFsdWVSZWdzIHBpY2tKU1IoR1BSUmVnIGZpcnN0LCBHUFJSZWcgc2Vjb25kKQorICAgIHsK
KyAgICAgICAgY29uc3RleHByIHNpemVfdCBzaXplT2ZDdXJyZW50QXJnID0gc2l6ZU9mQXJnPE9w
ZXJhdGlvblR5cGUsIEFyZ051bSAtIEluZGV4PigpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVPZkN1cnJlbnRBcmcgPD0gOCwgIkRvbid0IGtub3cgaG93IHRvIGhhbmRsZSBsYXJnZSBhcmd1
bWVudHMiKTsKKyAgICAgICAgLy8gQmFzZSBjYXNlLCAnZmlyc3QnIGFuZCAnc2Vjb25kJyBhcmUg
bmV2ZXIgYXJndW1lbnQgcmVnaXN0ZXIsIG9yIHdpbGwgYmUgcHVzaGVkIG9uIHRoZSBzdGFjayBh
bnl3YXkKKyAgICAgICAgaWYgY29uc3RleHByICghSW5kZXgpIHsKKyAgICAgICAgICAgIGlmIGNv
bnN0ZXhwciAoc2l6ZU9mQ3VycmVudEFyZyA8PSA0KSB7CisgICAgICAgICAgICAgICAgVU5VU0VE
X1BBUkFNKHNlY29uZCk7IC8vIE90aGVyd2lzZSB3YXJuaW5nIGR1ZSB0byBjb25zdGV4cHIKKyAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGZpcnN0KTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyB7IHNl
Y29uZCwgZmlyc3QgfTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhw
cihzaXplT2ZDdXJyZW50QXJnIDw9IDQpIHsKKyAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0o
Zmlyc3QpOyAvLyBPdGhlcndpc2Ugd2FybmluZyBkdWUgdG8gY29uc3RleHByCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJnTnVtLCBJbmRleCAtIDE+KHNl
Y29uZCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRF9XSVRIX01FU1NBR0UoIk91dCBvZiByZWdpc3RlcnMiKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB1bnNpZ25l
ZCBBcmdOdW0sIHVuc2lnbmVkIEluZGV4ID0gQXJnTnVtLCB0eXBlbmFtZS4uLiBBcmdzPgorICAg
IHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcGlja0pTUihHUFJSZWcgZmlyc3QpCisgICAg
eworICAgICAgICBjb25zdGV4cHIgc2l6ZV90IHNpemVPZkN1cnJlbnRBcmcgPSBzaXplT2ZBcmc8
T3BlcmF0aW9uVHlwZSwgQXJnTnVtIC0gSW5kZXg+KCk7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
c2l6ZU9mQ3VycmVudEFyZyA8PSA4LCAiRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGxhcmdlIGFy
Z3VtZW50cyIpOworICAgICAgICAvLyBCYXNlIGNhc2UsICdmaXJzdCcgaXMgbmV2ZXIgYW4gYXJn
dW1lbnQgcmVnaXN0ZXIsIG9yIHdpbGwgYmUgcHVzaGVkIG9uIHRoZSBzdGFjayBhbnl3YXkKKyAg
ICAgICAgaWYgY29uc3RleHByIChzaXplT2ZDdXJyZW50QXJnIDw9IDQpCisgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGZpcnN0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRURfV0lUSF9NRVNTQUdFKCJPdXQgb2Yg
cmVnaXN0ZXJzIik7CisgICAgfQorI2VuZGlmCisKK3B1YmxpYzoKKyAgICAvLyBTZWUgcHJlZmVy
cmVkQXJndW1lbnRHUFIgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24uIFRoaXMgdmVy
c2lvbiByZXR1cm5zIGEgSlNWYWx1ZVJlZ3MKKyAgICAvLyBpbnN0ZWFkIG9mIGEgR1BSLCB3aGlj
aCBvbiBKU1ZBTFVFNjQgYXJlIGVxdWl2YWxlbnQsIGJ1dCBvbiBKU1ZBTFVFMzJfNjQgYSBKU1Zh
bHVlUmVncyBpcworICAgIC8vIHJlcXVpcmVkIHRvIGhvbGQgYSA2NC1iaXQgd2lkZSBmdW5jdGlv
biBhcmd1bWVudCwgc28gdXNlIHRoaXMgaW4gcGFydGljdWxhciB3aGVuIHBhc3NpbmcgYQorICAg
IC8vIEpTVmFsdWUvRW5jb2RlZEpTVmFsdWUgYmUgY29tcGF0aWJsZSB3aXRoIGJvdGggSlNWQUxV
RTY0IGFuIEpTVkFMVUUzMl82NCBwbGF0Zm9ybXMsIGFuZCB1c2UKKyAgICAvLyBwcmVmZXJyZWRB
cmd1bWVudEdQUiB3aGVuIHBhc3NpbmcgaG9zdCBwb2ludGVycy4KKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgQXJnTnVtPgorICAgIHN0YXRpYyBjb25zdGV4
cHIgc3RkOjplbmFibGVfaWZfdDwoRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46OmFyaXR5
ID4gQXJnTnVtKSwgSlNWYWx1ZVJlZ3M+CisgICAgcHJlZmVycmVkQXJndW1lbnRKU1IoKQorICAg
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorI2lmICFPUyhXSU5ET1dTKQorICAgICAgICByZXR1cm4g
cGlja0pTUjxPcGVyYXRpb25UeXBlLCBBcmdOdW0+KAorICAgICAgICAgICAgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwK
KyAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5mbzo6YXJndW1lbnRHUFI0
LCBHUFJJbmZvOjphcmd1bWVudEdQUjUpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIHBpY2tKU1I8
T3BlcmF0aW9uVHlwZSwgQXJnTnVtPigKKyAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BS
MCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsCisgICAgICAg
ICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjMsIEdQUkluZm86Om5vbkFyZ0dQUjAsICAgR1BSSW5m
bzo6bm9uQXJnR1BSMSk7CisjZW5kaWYKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisjaWYgQ1BV
KEFSTV9USFVNQjIpCisgICAgICAgIC8vIFRoZSBsYXN0IHJlZ2lzdGVyIGlzIGd1YXJhbnRlZWQg
dG8gYmUgcHVzaGVkIG9udG8gdGhlIHN0YWNrIGZvciBjYWxscywgc28gd2UgY2FuIHVzZQorICAg
ICAgICAvLyB0aGUgbGluayByZWdpc3RlciBhcyBhIHRlbXBvcmFyeS4KKyAgICAgICAgcmV0dXJu
IHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJnTnVtPigKKyAgICAgICAgICAgIEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIs
CisgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjMsIEdQUkluZm86OnJlZ1Q3LCAgICAg
ICAgR1BSSW5mbzo6cmVnVDYsCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUNCwgICAgICAgIEdQ
UkluZm86OnJlZ1Q1LCAgICAgICAgQVJNUmVnaXN0ZXJzOjpscik7CisjZWxpZiBDUFUoTUlQUykK
KyAgICAgICAgcmV0dXJuIHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJnTnVtPigKKyAgICAgICAg
ICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIsCisgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjMsIEdQUklu
Zm86OnJlZ1QyLCAgICAgICAgR1BSSW5mbzo6cmVnVDMsCisgICAgICAgICAgICBHUFJJbmZvOjpy
ZWdUNCwgICAgICAgIEdQUkluZm86OnJlZ1Q1LCAgICAgICAgR1BSSW5mbzo6cmVnVDYpOworI2Vu
ZGlmCisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBDb21wdXRlcyAoc3RhdGljYWxseSwgYXQgY29t
cGlsYXRpb24gdGltZSksIHRoZSBpZGVhbCBtYWNoaW5lIHJlZ2lzdGVyIGFuIGFyZ3VtZW50IHNo
b3VsZCBiZQorICAgIC8vIGxvYWRlZCBpbnRvIGZvciBhIGZ1bmN0aW9uIGNhbGwuIFRoaXMgeWll
bGRzIHRoZSBBQkkgc3BlY2lmaWMgYXJndW1lbnQgcmVnaXN0ZXJzIGZvciB0aGUKKyAgICAvLyBp
bml0aWFsIGFyZ3VtZW50cyBhcyBhcHByb3ByaWF0ZSwgdGhlbiBzdWl0YWJsZSB0ZW1wb3Jhcnkg
cmVnaXN0ZXJzIGZvciB0aGUgcmVtYWluaW5nCisgICAgLy8gYXJndW1lbnRzLiBUaGUgaWRlYSBp
cyB0aGF0ICdzZXR1cEFyZ3VtZW50cycgd2lsbCBoYXZlIHRvIGRvIHRoZSBtaW5pbWFsIGFtb3Vu
dCBvZiB3b3JrIHdoZW4KKyAgICAvLyB1c2luZyB0aGVzZSByZWdpc3RlcnMgdG8gaG9sZCB0aGUg
YXJndW1lbnRzLCBzbyBpZiB5b3UgYXJlIGxvYWRpbmcgbW9zdCBhcmd1bWVudHMgZnJvbSBtZW1v
cnkKKyAgICAvLyBhbnl3YXksIHVzaW5nIHRoZXNlIHJlZ2lzdGVycyB5aWVsZHMgdGhlIHNtYWxs
ZXN0IGNvZGUgcmVxdWlyZWQgZm9yIGEgY2FsbC4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdW5zaWduZWQgQXJnTnVtPgorICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpl
bmFibGVfaWZfdDwoRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46OmFyaXR5ID4gQXJnTnVt
KSwgR1BSUmVnPgorICAgIHByZWZlcnJlZEFyZ3VtZW50R1BSKCkKKyAgICB7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplT2ZBcmc8T3BlcmF0aW9uVHlw
ZSwgQXJnTnVtPigpIDw9IDQsICJBcmd1bWVudCBkb2VzIG5vdCBmaXQgaW4gR1BSIik7CisjZW5k
aWYKKyAgICAgICAgcmV0dXJuIHByZWZlcnJlZEFyZ3VtZW50SlNSPE9wZXJhdGlvblR5cGUsIEFy
Z051bT4oKS5wYXlsb2FkR1BSKCk7CisgICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKaW5kZXggYTE3
NjI0NGUxZTMwOTU2Njc3MzQ2MGFkMjA2NTBlMTliYzNkYWQ2OC4uYmNiNTJlNzliOGZlODIxNDJl
ZThkZjNlNTE1NTczNDljMjQ5ZGMwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBB
bnkgcmVnaXN0ZXIgdGhhdCBoYXMgYmVlbiBsb2NrZWQgb3IgYWNxdWlyZWQgbXVzdCBiZSByZWxl
YXNlZAogICAgIC8vIGJlZm9yZSBjYWxsaW5nIHByZXBhcmVGb3JUYWlsQ2FsbCgpIG9yIHByZXBh
cmVGb3JTbG93UGF0aCgpLgorICAgIC8vIFVubGVzcyB5b3Uga25vdyB0aGUgcmVnaXN0ZXIgaXMg
bm90IHRoZSB0YXJnZXQgb2YgYSByZWNvdmVyeS4KICAgICB2b2lkIGxvY2tHUFIoR1BSUmVnIGdw
cikKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGdwcikpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAppbmRleCAyZjdjZjVhYmJiMzk5Y2E3NDQzZWFj
ODMyMDMyZjZjMDczYjQyYmM5Li5hMGI2MDQ1ZmQ2M2EwYjRiOTM2M2FkZjc5YzY0ODdlOTlmYTMz
M2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaApAQCAtNjksMTUgKzY5LDE2IEBA
IHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByID09IElu
dmFsaWRHUFJSZWc7IH0KICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gbV9ncHIgIT0gSW52YWxpZEdQUlJlZzsgfQogCi0gICAgYm9vbCBvcGVyYXRvcj09KEpTVmFs
dWVSZWdzIG90aGVyKSB7IHJldHVybiBtX2dwciA9PSBvdGhlci5tX2dwcjsgfQotICAgIGJvb2wg
b3BlcmF0b3IhPShKU1ZhbHVlUmVncyBvdGhlcikgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
IH0KKyAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KEpTVmFsdWVSZWdzIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX2dwciA9PSBvdGhlci5tX2dwcjsgfQorICAgIGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yIT0oSlNWYWx1ZVJlZ3Mgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOyB9CiAgICAgCiAgICAgR1BSUmVnIGdwcigpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByOyB9Ci0g
ICAgR1BSUmVnIHRhZ0dQUigpIGNvbnN0IHsgcmV0dXJuIEludmFsaWRHUFJSZWc7IH0KLSAgICBH
UFJSZWcgcGF5bG9hZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByOyB9Ci0gICAgCi0gICAgYm9v
bCB1c2VzKEdQUlJlZyBncHIpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByID09IGdwcjsgfQorICAgIGNv
bnN0ZXhwciBHUFJSZWcgdGFnR1BSKCkgY29uc3QgeyByZXR1cm4gSW52YWxpZEdQUlJlZzsgfQor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcGF5bG9hZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByOyB9
CiAgICAgCisgICAgY29uc3RleHByIGJvb2wgdXNlcyhHUFJSZWcgZ3ByKSBjb25zdCB7IHJldHVy
biBtX2dwciA9PSBncHI7IH0KKyAgICBjb25zdGV4cHIgYm9vbCBvdmVybGFwcyhKU1ZhbHVlUmVn
cyBvdGhlcikgY29uc3QgeyByZXR1cm4gdXNlcyhvdGhlci5wYXlsb2FkR1BSKCkpOyB9CisKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CkBAIC0xNjYs
NyArMTY3LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZVJlZ3Mo
R1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIpCisgICAgY29uc3RleHByIEpTVmFsdWVS
ZWdzKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSKQogICAgICAgICA6IG1fdGFnR1BS
KHRhZ0dQUikKICAgICAgICAgLCBtX3BheWxvYWRHUFIocGF5bG9hZEdQUikKICAgICB7CkBAIC0x
NzcsNyArMTc4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3MoZ3ByMSwg
Z3ByMik7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBKU1ZhbHVlUmVncyBwYXlsb2FkT25seShH
UFJSZWcgZ3ByKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcGF5bG9hZE9ubHko
R1BSUmVnIGdwcikKICAgICB7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyhJbnZhbGlkR1BS
UmVnLCBncHIpOwogICAgIH0KQEAgLTE4OSwxNSArMTkwLDE1IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHx8IHN0YXRpY19jYXN0PEdQUlJlZz4obV9wYXlsb2FkR1BSKSAhPSBJbnZhbGlkR1BSUmVn
OwogICAgIH0KIAotICAgIGJvb2wgb3BlcmF0b3I9PShKU1ZhbHVlUmVncyBvdGhlcikgY29uc3QK
KyAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KEpTVmFsdWVSZWdzIG90aGVyKSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fdGFnR1BSID09IG90aGVyLm1fdGFnR1BSCiAgICAgICAg
ICAgICAmJiBtX3BheWxvYWRHUFIgPT0gb3RoZXIubV9wYXlsb2FkR1BSOwogICAgIH0KLSAgICBi
b29sIG9wZXJhdG9yIT0oSlNWYWx1ZVJlZ3Mgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOyB9CisgICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShKU1ZhbHVlUmVncyBv
dGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KICAgICAKLSAgICBHUFJS
ZWcgdGFnR1BSKCkgY29uc3QgeyByZXR1cm4gbV90YWdHUFI7IH0KLSAgICBHUFJSZWcgcGF5bG9h
ZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1fcGF5bG9hZEdQUjsgfQorICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdGFnR1BSKCkgY29uc3QgeyByZXR1cm4gbV90YWdHUFI7IH0KKyAgICBjb25zdGV4cHIgR1BS
UmVnIHBheWxvYWRHUFIoKSBjb25zdCB7IHJldHVybiBtX3BheWxvYWRHUFI7IH0KICAgICBHUFJS
ZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNoKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNo
ICh3aGljaCkgewpAQCAtMjEwLDggKzIxMSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0
YWdHUFIoKTsKICAgICB9CiAKLSAgICBib29sIHVzZXMoR1BSUmVnIGdwcikgY29uc3QgeyByZXR1
cm4gbV90YWdHUFIgPT0gZ3ByIHx8IG1fcGF5bG9hZEdQUiA9PSBncHI7IH0KLSAgICAKKyAgICBj
b25zdGV4cHIgYm9vbCB1c2VzKEdQUlJlZyBncHIpIGNvbnN0IHsgcmV0dXJuIG1fdGFnR1BSID09
IGdwciB8fCBtX3BheWxvYWRHUFIgPT0gZ3ByOyB9CisgICAgY29uc3RleHByIGJvb2wgb3Zlcmxh
cHMoSlNWYWx1ZVJlZ3Mgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdXNlcyhv
dGhlci5wYXlsb2FkR1BSKCkpIHx8IHVzZXMob3RoZXIudGFnR1BSKCkpOworICAgIH0KKwogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAppbmRleCA2ZjJjZWQ3MzM5NjVhNmIwMmE5NzViYTQxYmMzYjc3NTA3
YjI4MWNmLi5iMTc5Yzg1MTUwZGQ5YzdkMzk5ZTBjYzczYWE5ZmU2NDRiYzgxMDA3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC04MDAsMTMgKzgwMCwxMSBAQCB2b2lkIEpJVDo6Y29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZz
ZXQgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICBsb2FkNjQoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zm
c2V0KSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgICAgIGNvbnN0ZXhw
ciBKU1ZhbHVlUmVncyByZXN1bHRSZWdzIHsgcmVnVDAgfTsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICAgICAgICAgICAgICBsb2FkMzIo
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgICAg
ICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyB7IHJlZ1QxLCByZWdUMCB9OwogI2Vu
ZGlmCisgICAgICAgICAgICAgICAgbG9hZFZhbHVlKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIs
IG9mZnNldCksIHJlc3VsdFJlZ3MpOwogICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0
UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZh
bHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTkzOSw3ICs5MzcsNiBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1dG8mIGdlbmVy
YXRvcnMpIHsKICAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7CiAgICAgICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKQEAgLTk1OSwzMSArOTU2LDEw
IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKICAgICBm
aW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKICAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzKTsKLSNlbHNlCi0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywg
cGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRj
aEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBw
YXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hC
dWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZl
cik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7Ci0jZW5kaWYKIAog
ICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8g
PSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOwogICAgICAgICBpbmZvLmRv
bmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29t
cGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7Ci0jZWxzZQotICAgICAgICBDYWxsTGlua0luZm8m
IGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaW5mby5zZXRD
b2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCi0gICAgICAgICAgICBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5k
b25lTG9jYXRpb24pKTsKLSNlbmRpZgotCiAgICAgfQogCiAgICAgSklUQ29kZU1hcEJ1aWxkZXIg
aml0Q29kZU1hcEJ1aWxkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCA4MWE5OWRhMThk
MDlkNzA4YWRiZTljN2YwYThkOGU2OWMzZmIxZWIwLi5lMWI0ODIwNjhjYjc3OTI1YWJlMTc4ZjFh
ZGU5NTNmMjUzYjQzMzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTE1MiwxMyArMTUy
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJ
bmZvOwogICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0
YW50OwotI2Vsc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7
Ci0gICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwotI2VuZGlmCiAgICAgfTsKIAog
ICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwpAQCAtMjk0LDcg
KzI4OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmRleCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKKwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAg
ICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9w
X2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zMDYsMTkgKzMwMSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzCiAgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKLSNl
bHNlCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PAotICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKLSAgICAgICAgICAgICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLSAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKLSAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9
PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdz
Ci0gICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
T3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAs
IHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7Ci0jZW5k
aWYKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxl
VGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKQEAgLTM1NSw5ICszMzcs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJv
ZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29u
c3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7
CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVj
b2RlJiwgSlNWYWx1ZVJlZ3MgY2VsbEpTUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgotICAgICAgICB2b2lkIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJ
RCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgSlNWYWx1
ZVJlZ3MgY2VsbEpTUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAtNDI2LDYg
KzQwOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
IAorICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChKU1ZhbHVlUmVncyk7
CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKEpTVmFsdWVSZWdzLCBW
aXJ0dWFsUmVnaXN0ZXIpOworCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXgg
ZmM4MWE1ZTkwYjQ3OWZhZGI2NzYwMzAxNzU5Mjc1MTEzNzMwODQwNy4uMTBmNDE1NzcyY2IyZDhl
Yzg3MzFmNmQwYmVjZGY3NDk1MmFmNDViOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFC
TEUoSklUKQotI2lmIFVTRShKU1ZBTFVFNjQpCisKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1
ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCkBAIC00MiwxMyArNDIsNDMgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmV0dXJuVmFsdWVKU1IgeyBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiB9OworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgeyBHUFJJbmZv
OjpyZWdUMCB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBjb25zdGV4cHIgSlNWYWx1
ZVJlZ3MgcmV0dXJuVmFsdWVKU1IgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSIH07CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7
IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9OworI2VuZGlmCit9CisKK3ZvaWQgSklU
OjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoY2FsbEZyYW1lUmVnaXN0ZXIp
KTsKKworICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSIChyZXR1cm5W
YWx1ZUdQUjIvcmV0dXJuVmFsdWVHUFIgb24gMzItYml0KS4KKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlSlNSKTsKKworI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAg
IHJldCgpOworI2Vsc2UKKyAgICBlbWl0TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0dWIob3Bf
cmV0X2hhbmRsZXJHZW5lcmF0b3IpLmNvZGUoKSk7CisjZW5kaWYKK30KKworCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNv
ZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZXR1cm5WYWx1ZUpTUik7CiB9CiAK
KwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzCkBAIC02MiwxMCArOTIsMTIgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiAKIAogICAgIGlmIChPcDo6
b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKLSAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAg
ICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsK
KyAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHRtcEpTUiA9IHJldHVyblZhbHVlSlNSOwor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHRtcEdQUiA9IHRtcEpTUi5wYXlsb2FkR1BSKCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zm
c2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCB0bXBKU1Ip
OworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwodG1wSlNSKTsKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3ModG1wSlNSLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgdG1wR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRl
Y29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2Fs
bExpbmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRP
Zkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9
CiAKQEAgLTczLDcgKzEwNSw2IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpcyksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKTsKIH0KIAotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQg
PT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTg2LDI5ICsxMTcsNTAgQEAgSklUOjpjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
Y2FsbExpbmtJbmYKICAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0
RnJlZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVhbCByZWdpc3RlciBp
ZiB3ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0g
Ynl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCByZWdUMSk7Ci0gICAgWl9KSVRPcGVyYXRpb25fR0paWiBzaXplT3BlcmF0aW9uOwot
ICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQot
ICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3Vt
ZW50czsKLSAgICBlbHNlCi0gICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJh
bWVGb3JWYXJhcmdzOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZp
cnN0VmFyQXJnT2Zmc2V0KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0
ZXIpLCByZWdUMSk7Ci0gICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVH
UFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOworICAgIHsKKyAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxaX0pJVE9wZXJhdGlvbl9H
SlpaLCAwPigpOworICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzSlNSID0g
cHJlZmVycmVkQXJndW1lbnRKU1I8Wl9KSVRPcGVyYXRpb25fR0paWiwgMT4oKTsKKworICAgICAg
ICBaX0pJVE9wZXJhdGlvbl9HSlpaIHNpemVPcGVyYXRpb247CisgICAgICAgIGlmIChPcDo6b3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAgICAgICAgc2l6
ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVG
b3JWYXJhcmdzOworCisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0pTUik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgZ2xvYmFsT2JqZWN0R1BSLCBh
cmd1bWVudHNKU1IsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CisgICAg
ICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVn
VDEsIHJlZ1QxKTsKKyAgICB9CisKKyAgICAvLyBUT0RPOiBXSFkgVEhFIERJRkZFUkVOQ0U/Pwor
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5
dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMik7Ci0gICAgRl9K
SVRPcGVyYXRpb25fR0ZKWlogc2V0dXBPcGVyYXRpb247Ci0gICAgaWYgKE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCi0gICAgICAgIHNldHVwT3BlcmF0aW9u
ID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7Ci0gICAgZWxzZQotICAgICAg
ICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJl
Z1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7Ci0gICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2b2lkKikpKSks
IHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIHsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzSlNSIHsg
cmVnVDIgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBhcmd1bWVudHNKU1IgeyByZWdUMywgcmVnVDIgfTsKKyNlbmRpZgorCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNKU1IpOworICAgICAg
ICBGX0pJVE9wZXJhdGlvbl9HRkpaWiBzZXR1cE9wZXJhdGlvbjsKKyAgICAgICAgaWYgKE9wOjpv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAgICAgICAgICBz
ZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFy
YXJnc0ZyYW1lOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDQsIHJlZ1QxLCBhcmd1bWVudHNKU1IsIGZp
cnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJl
Z1Q3KTsKKyAgICB9CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNl
dCksIHJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUNywgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKICAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJ
bmZvQ29uc3RhbnQsIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJ
bmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CiAg
ICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CkBAIC0x
MTYsMTAgKzE2OCwxMSBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZgogICAgIG5vdEJpZ2dlc3Qu
bGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHRoaXNWYWx1ZSwgcmVnVDApOwotICAgIHN0b3JlNjQocmVnVDAsIEFk
ZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHRo
aXNKU1IgPSBjYWxsZWVKU1I7IC8vIFVzZWQgYXMgdGVtcG9yYXJ5IHJlZ2lzdGVyCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHRoaXNKU1IpOworICAgIHN0b3JlVmFsdWUo
dGhpc0pTUiwgQWRkcmVzcyhyZWdUNywgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIAotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSksIHJlZ1Q3LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgpAQCAtMTM5LDcgKzE5Miw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3Qg
T3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9l
Y21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmV0dXJuVmFsdWVKU1IpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsK
IApAQCAtMTU4LDcgKzIxMSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzCiAKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAKLSAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9m
KFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSksIHJlZ1QwKTsKKyAgICBsb2FkVmFsdWUoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSksIGNhbGxlZUpTUik7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7
CiAgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5m
byk7CiAgICAgcmVzZXRTUCgpOwpAQCAtMTc4LDcgKzIzMSw5IEBAIGJvb2wgSklUOjpjb21waWxl
VGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZv
KiBpbmZvCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxl
RGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CiAgICAgc2h1ZmZsZURh
dGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CiAgICAgc2h1ZmZsZURhdGEtPm51
bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyNlbmRpZgogICAgIHNodWZmbGVEYXRhLT5udW1Mb2Nh
bHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykg
LyBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29k
ZS5tX2FyZ2MpOwpAQCAtMTg4LDEyICsyNDMsMTkgQEAgYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8K
ICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAg
ICB9Ci0gICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1Qw
LCBEYXRhRm9ybWF0SlMpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc2h1ZmZsZURhdGEtPmNh
bGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIERhdGFG
b3JtYXRKUyk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHNodWZmbGVEYXRhLT5jYWxs
ZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBjYWxsZWVKU1Iu
cGF5bG9hZEdQUigpKTsKKyNlbmRpZgogICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVS
ZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKIAotICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVn
VDIpOwotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKLSAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKKyAgICBsb2FkQ29u
c3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7CisgICAgSnVtcExp
c3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgq
dGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBbJl0geworICAg
ICAgICBDYWxsRnJhbWVTaHVmZmxlciBzaHVmZmxlciB7ICp0aGlzLCAqc2h1ZmZsZURhdGEgfTsK
KyAgICAgICAgc2h1ZmZsZXIubG9ja0dQUihjYWxsTGlua0luZm9HUFIpOworICAgICAgICBzaHVm
Zmxlci5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93
UGF0aHMpOwogCkBAIC0yNDYsMjAgKzMwOCwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAog
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBo
b2xkcyBjYWxsZWUuCi0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVKU1IpOworICAgIHN0b3JlVmFsdWUoY2FsbGVlSlNSLCBB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSk7CiAKICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJu
OwogCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAvLyBXZSBuZWVkIHRoaXMgb24gSlNWQUxV
RTMyXzY0IG9ubHkgYXMgb24gSlNWQUxVRTY0IGEgcG9pbnRlciBjb21wYXJpc29uIGluIHRoZSBE
YXRhSUMgZmFzdAorICAgIC8vIHBhdGNoIGNhdGNoZXMgdGhpcy4KKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwoY2FsbGVlSlNSKSk7CisjZW5kaWYKKwogICAgIGlmIChjb21waWxlVGFp
bENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCByZWdUMik7
CisgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKKyAgICBsb2Fk
Q29uc3RhbnQoaW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOwogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86
OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7Cisg
ICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNG
YXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBb
Jl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAgICAg
cHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CisgICAgICAgICAgICBwcmVwYXJlRm9yVGFp
bENhbGxTbG93KGNhbGxMaW5rSW5mb0dQUik7CiAgICAgICAgIH0pOwogICAgICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aHMpOwogICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CkBA
IC0yNjcsNyArMzM2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxs
TGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIo
KSwgY2FsbExpbmtJbmZvR1BSKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIApAQCAtNDAzLDIwICs0NzIsMTkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
CiAKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwotICAgIC8v
IGNhbGwgcmVzdWx0IChpdGVyYXRvcikgaXMgaW4gcmVnVDAKKworICAgIC8vIGNhbGwgcmVzdWx0
IChpdGVyYXRvcikgaXMgaW4gcmVnVDAgKHJlZ1QxL3JlZ1QwIG9yIDMyLWJpdCkKKworICAgIHVz
aW5nIG5hbWVzcGFjZSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM7CisgICAgc3RhdGljX2Fzc2Vy
dCghcmV0dXJuVmFsdWVKU1IudXNlcyhzdHViSW5mb0dQUikpOwogCiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwotICAgIAotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgbW92ZShyZWdUMCwgYmFzZUdQUik7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZXR1cm5WYWx1ZUpTUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwo
KSksIHJldHVyblZhbHVlSlNSLCByZXN1bHRKU1IsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkdldEJ5SWQ7CkBAIC00MzAsOCArNDk4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVzdWx0SlNSKTsKIAogICAgIGZhc3RDYXNlLmxpbmso
dGhpcyk7CiB9CkBAIC00NDMsMTAgKzUxMSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Qwog
ICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgSlNWYWx1ZVJlZ3MgaXRlcmF0b3JKU1IgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1I7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7Ci0gICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikpOworICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9ySlNSKSk7CisgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckpTUikpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbmV4dFZSZWcgPSBieXRlY29kZS5tX25leHQ7CkBAIC00NTYsMTAgKzUyNCwyMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93QwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCi0gICAgbW92ZShpdGVyYXRvckdQUiwgYXJndW1lbnRHUFIyKTsKLSAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIG5leHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09w
ZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJnMkpTUiA9IHByZWZl
cnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisKKyAgICBtb3ZlVmFsdWVSZWdz
KGl0ZXJhdG9ySlNSLCBhcmcySlNSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPFNsb3dPcGVy
YXRpb24+KAorICAgICAgICBieXRlY29kZSwKKyAgICAgICAgQWRkcmVzcyhzdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwKKyAgICAgICAgbmV4
dFZSZWcsCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIGFyZzJKU1IsCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogCiAgICAgYXV0byBkb25lID0ganVtcCgpOwpAQCAtNDgzLDggKzU2MSwx
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbikKICAgICAgICAgfQogICAgIH0pKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwotICAgIEp1bXAgZ2VuZXJpY0Nhc2UgPSBi
cmFuY2hJZk5vdEVtcHR5KHJlZ1QwKTsKKyAgICB1c2luZyBuYW1lc3BhY2UgQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOworCisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIG5leHRKU1IgPSBiYXNl
SlNSOyAvLyBVc2VkIGFzIHRlbXBvcmFyeSByZWdpc3RlcgorICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBuZXh0SlNSKTsKKyAgICBKdW1wIGdlbmVyaWNDYXNlID0g
YnJhbmNoSWZOb3RFbXB0eShuZXh0SlNSKTsKIAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKQEAgLTQ5NiwyNCArNTc3LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogICAgIHN0b3JlOFRvTWV0
YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9m
SXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVu
TW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24s
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsK
LSAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdUMAog
Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c3R1YkluZm87Ci0gICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3RlcjsKLSAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgLy8gY2FsbCByZXN1bHQg
KHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4gcmVnVDAgIChyZWdUMS9yZWdUMCBvciAzMi1i
aXQpCisgICAgc3RhdGljX2Fzc2VydCghcmV0dXJuVmFsdWVKU1IudXNlcyhzdHViSW5mb0dQUikp
OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGl0ZXJDYWxsUmVzdWx0SlNS
ID0gZG9udENsb2JiZXJKU1I7CisgICAgbW92ZVZhbHVlUmVncyhyZXR1cm5WYWx1ZUpTUiwgaXRl
ckNhbGxSZXN1bHRKU1IpOworCisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGRvbmVKU1IgPSBy
ZXN1bHRKU1I7CiAgICAgewotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocmV0dXJu
VmFsdWVHUFIgPT0gYmFzZUdQUik7Ci0KLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmV0dXJu
VmFsdWVKU1IpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3Mu
YWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5zZXQoaXRlckNh
bGxSZXN1bHRKU1IpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwo
KSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpKSwgcmV0dXJuVmFsdWVKU1IsIGRvbmVKU1IsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKIAogICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKQEAgLTUyNywyOCArNjA2LDI2IEBAIHZvaWQgSklU
OjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQog
ICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsg
ZG9uZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rv
bmUsIGRvbmVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBk
b25lSlNSKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUs
IGRvbmVKU1IpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAog
ICAgIHsKLSAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2Fs
bFJlc3VsdEdQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUpTUiwg
aXRlckNhbGxSZXN1bHRKU1IpOwogICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2Ny
YXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
c2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAg
R1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
ZmFsc2U7CiAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKLSAgICAgICAgSnVt
cExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRv
bmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRl
cmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIGRvbmVKU1IsIHNjcmF0Y2gxLCBzY3Jh
dGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBnbG9iYWxHUFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgbW92ZShp
dGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CisgICAgICAgIG1vdmVWYWx1ZVJlZ3MoaXRlckNh
bGxSZXN1bHRKU1IsIGJhc2VKU1IpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAogICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBiYXNlSlNS
LCByZXN1bHRKU1IsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAogICAgICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CiAgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZDsKQEAgLTU2Miw4ICs2MzksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKICAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKLSAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRKU1IpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3VsdEpTUik7CiAK
ICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAgLTU3Nyw3ICs2NTQs
OSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93QwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
Ojpkb250Q2xvYmJlclJlZ2lzdGVyOworICAgIHVzaW5nIG5hbWVzcGFjZSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM7CisKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgaXRlckNhbGxSZXN1bHRK
U1IgPSBkb250Q2xvYmJlckpTUjsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewpAQCAtNTg1LDI1ICs2NjQsMzQgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0MKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAg
ICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0SlNSKSk7CiAKICAgICAgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAgICAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKICAgICAgICAgCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRH
UFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2Fs
bFJlc3VsdEpTUikpOwogCi0gICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50
R1BSMik7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICAgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAg
dXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJn
dW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7Cisg
ICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBhcmcySlNSID0gcHJlZmVycmVkQXJndW1lbnRK
U1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKIAorICAgICAgICBtb3ZlVmFsdWVSZWdzKGl0ZXJDYWxs
UmVzdWx0SlNSLCBhcmcySlNSKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3RHUFIpOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
PFNsb3dPcGVyYXRpb24+KAorICAgICAgICAgICAgYnl0ZWNvZGUsCisgICAgICAgICAgICBBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLAorICAgICAgICAgICAgZG9uZVZSZWcsCisgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIs
IHN0dWJJbmZvR1BSLCBhcmcySlNSLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKICAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCi0gICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0OwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lR1BSKTsK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2Fs
bFJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBkb25lSlNSID0gcmVz
dWx0SlNSOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lSlNS
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVy
Q2FsbFJlc3VsdEpTUik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChq
dW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwpAQCAtNjIwLDE1ICs3MDgs
MjMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0MKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAotICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVu
dEdQUjIpOwotICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgICAg
ICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRB
cmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsK
KyAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFyZzJKU1IgPSBwcmVmZXJyZWRBcmd1bWVu
dEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAgICAgIG1vdmVWYWx1ZVJlZ3MoaXRlckNh
bGxSZXN1bHRKU1IsIGFyZzJKU1IpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdEdQUik7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oCisgICAgICAgICAgICBieXRl
Y29kZSwKKyAgICAgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgICAgICB2YWx1ZVZSZWcsCisgICAg
ICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBhcmcySlNSLAorICAgICAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogICAgIH0KIH0KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0jZW5kaWYgLy8gRU5BQkxF
KEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg3ZjliOTBhNWJkZjEzN2Q3ZjgxYzk0YmExZjlmNmYw
ODMwNjkzMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw2MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEsIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotI2luY2x1ZGUgIkpJVC5oIgotCi0jaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgotI2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJM
aW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiT3Bjb2RlSW5saW5lcy5oIgotI2luY2x1ZGUgIlJlc3Vs
dFR5cGUuaCIKLSNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgotI2luY2x1ZGUgIlNsb3dQ
YXRoQ2FsbC5oIgotI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCi0jaW5jbHVkZSAiVGh1bmtH
ZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0KLW5hbWVz
cGFjZSBKU0MgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0UHV0Q2Fs
bFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Ci0gICAgZW1pdFN0b3JlKGRl
c3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0
dWFsUmVnaXN0ZXIoKSwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcmV0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLQotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdU
MSwgcmVnVDApOwotCi0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICBy
ZXQoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbEV2YWw+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCk7Ci19Ci0gCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLSAgICAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLSAgICAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVP
cENhbGw8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGw8T3BUYWlsQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBjb21waWxlT3BDYWxsPE9wQ2FsbEV2YWw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxs
TGlua0luZm9JbmRleCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGw8
T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGw8T3BUYWlsQ2Fs
bFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wQ2FsbDxPcFRh
aWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwotfQotICAgIAotdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0X3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BD
YWxsPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwotfQotICAgIAotdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wQ2FsbDxPcENv
bnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci1zdGQ6OmVuYWJsZV9pZl90PAotICAgIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzCi0gICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSwgdm9pZD4KLUpJ
VDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQot
ewotICAgIHVuc2lnbmVkIGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
OwotICAgIGludCBhcmdDb3VudCA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVj
b2RlLCBjaGVja3BvaW50KTsKLSAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8
aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkp
OwotCi0gICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgewotICAgICAgICBlbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQg
KyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwLCByZWdU
MSk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BDYWxsOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0
dXJlSUQoKSk7Ci0gICAgICAgIGRvbmUubGluayh0aGlzKTsKLSAgICB9Ci0KLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoYXJnQ291bnQpLCBBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotc3Rk
OjplbmFibGVfaWZfdDwKLSAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9w
OjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwotICAgIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzCi0sIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQotewotICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gT3A6Om9wY29kZUlEOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29k
ZS5tX3RoaXNWYWx1ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUu
bV9hcmd1bWVudHM7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUubV9maXJz
dEZyZWUub2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNvZGUubV9m
aXJzdFZhckFyZzsKLQotICAgIGVtaXRMb2FkKGFyZ3VtZW50cywgcmVnVDEsIHJlZ1QwKTsKLSAg
ICBaX0pJVE9wZXJhdGlvbl9HSlpaIHNpemVPcGVyYXRpb247Ci0gICAgaWYgKE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCi0gICAgICAgIHNpemVPcGVyYXRp
b24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwotICAgIGVsc2UKLSAg
ICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAg
Y2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBm
aXJzdFZhckFyZ09mZnNldCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lz
dGVyKSwgcmVnVDEpOwotICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVl
R1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0gICAgZW1pdExvYWQoYXJndW1lbnRzLCByZWdUMiwgcmVnVDQpOwotICAgIEZf
SklUT3BlcmF0aW9uX0dGSlpaIHNldHVwT3BlcmF0aW9uOwotICAgIGlmIChvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCi0gICAgICAgIHNldHVwT3BlcmF0aW9uID0g
b3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7Ci0gICAgZWxzZQotICAgICAgICBz
ZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVy
YXRpb24oc2V0dXBPcGVyYXRpb24sIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJl
Z1QwKTsKLSAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7Ci0KLSAgICAvLyBQcm9maWxl
IHRoZSBhcmd1bWVudCBjb3VudC4KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+
YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1
bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3Jl
MzIocmVnVDIsIGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkp
OwotICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKLSAgICAKLSAgICAvLyBJbml0aWFsaXplICd0
aGlzJy4KLSAgICBlbWl0TG9hZCh0aGlzVmFsdWUsIHJlZ1QyLCByZWdUMCk7Ci0gICAgc3RvcmUz
MihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgUGF5bG9hZE9mZnNldCArIChDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpKTsK
LSAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QxLCBUYWdPZmZzZXQgKyAoQ2FsbEZyYW1l
Ojp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKSk7Ci0gICAgCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQotewotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChj
b25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKLXsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1z
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1Bv
aW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBB
ZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLQotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9w
cm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7Ci0KLSAgICBlbWl0UHV0Q2FsbFJlc3Vs
dChieXRlY29kZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigp
OwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmFkZENhbGxM
aW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGluZm8tPnNldFVwQ2Fs
bChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKLQotICAgIGludCByZWdpc3Rlck9mZnNldCA9
IC1ieXRlY29kZS5tX2FyZ3Y7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2Rl
Lm1fY2FsbGVlOwotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNp
emVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgZW1pdExvYWQoY2FsbGVlLCByZWdU
MSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKLQotICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsK
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkK
LXsKLSAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUg
PSBjYWxsZWVGb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOwotCi0g
ICAgLyogQ2FsbGVyIGFsd2F5czoKLSAgICAgICAgLSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVy
IHRvIGNhbGxlZSBjYWxsRnJhbWUuCi0gICAgICAgIC0gSW5pdGlhbGl6ZXMgQXJndW1lbnRDb3Vu
dDsgQ2FsbGVyRnJhbWU7IENhbGxlZS4KLQotICAgICAgIEZvciBhIEpTIGNhbGw6Ci0gICAgICAg
IC0gQ2FsbGVlIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCi0gICAgICAgIC0gQ2Fs
bGVlIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGJlZm9yZSByZXR1cm4uCi0KLSAgICAgICBG
b3IgYSBub24tSlMgY2FsbDoKLSAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7
IENvZGVCbG9jay4KLSAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIg
YWZ0ZXIgcmV0dXJuLgotICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsK
LSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9wcm9m
aWxlZENvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOwotICAgIC8vIFNQIGhv
bGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVu
dENvdW50IGluaXRpYWxpemVkLgotICAgIAotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90
IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOwotICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwotICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVn
VDEsIHJlZ1QwKTsgLy8gcmVnVDEsIHJlZ1QwIGhvbGRzIGNhbGxlZS4KLQotICAgIHN0b3JlMzIo
cmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpOwotCi0gICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKSwgcmVnVDApOwotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgp
ID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5k
KENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QxKSk7Ci0KLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCBbJl0gewotICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwotICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7Ci0gICAgICAg
IH0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwotICAgICAgICBhdXRvIGRvbmVM
b2NhdGlvbiA9IGxhYmVsKCk7Ci0gICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMs
IHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKLSAgICBhZGRTbG93
Q2FzZShzbG93UGF0aHMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLQotICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVj
b2RlKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQotewot
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwotCi0gICAgaWYgKG9wY29kZUlE
ID09IG9wX2NhbGxfZXZhbCkgewotICAgICAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShpbnN0
cnVjdGlvbiwgaXRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQotICAgICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwgKnRoaXMp
OwotCi0gICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpIHsKLSAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2Fs
bCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwotICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Bl
bj4oKTsKLSAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKLSAgICAgICAgc3dp
dGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewotICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJu
IGl0ZXJhdG9yX29wZW5fdHJ5X2Zhc3RfbmFycm93OwotICAgICAgICBjYXNlIFdpZGUxNjogcmV0
dXJuIGl0ZXJhdG9yX29wZW5fdHJ5X2Zhc3Rfd2lkZTE2OwotICAgICAgICBjYXNlIFdpZGUzMjog
cmV0dXJuIGl0ZXJhdG9yX29wZW5fdHJ5X2Zhc3Rfd2lkZTMyOwotICAgICAgICBkZWZhdWx0OiBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfSkoKTsKLQotICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RG
dW5jdGlvbik7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLSAgICBKdW1wIGZhc3RDYXNlID0g
YnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwotCi0gICAg
Y29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7Ci0KLSAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwotICAgIAotICAgIC8v
IGNhbGwgcmVzdWx0IChpdGVyYXRvcikgaXMgaW4gcmVnVDEgKHRhZykvcmVnVDAgKHBheWxvYWQp
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0
OwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7Ci0KLSAgICBH
UFJSZWcgdGFnSXRlcmF0b3JHUFIgPSByZWdUMTsKLSAgICBHUFJSZWcgcGF5bG9hZEl0ZXJhdG9y
R1BSID0gcmVnVDA7Ci0KLSAgICBHUFJSZWcgdGFnTmV4dEdQUiA9IHRhZ0l0ZXJhdG9yR1BSOwot
ICAgIEdQUlJlZyBwYXlsb2FkTmV4dEdQUiA9IHBheWxvYWRJdGVyYXRvckdQUjsKLQotICAgIEpT
VmFsdWVSZWdzIG5leHRSZWdzID0gSlNWYWx1ZVJlZ3ModGFnTmV4dEdQUiwgcGF5bG9hZE5leHRH
UFIpOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRD
b2RlQmxvY2ssCi0gICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAotICAgICAgICBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLAotICAgICAgICBKU1ZhbHVl
UmVncyh0YWdJdGVyYXRvckdQUiwgcGF5bG9hZEl0ZXJhdG9yR1BSKSwKLSAgICAgICAgbmV4dFJl
Z3MsCi0gICAgICAgIEludmFsaWRHUFJSZWcsCi0gICAgICAgIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwotICAgIAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBuZXh0UmVncyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIG5leHRSZWdzKTsKLQotICAgIGZhc3RD
YXNlLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1
bXAoKSk7Ci0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgR1BSUmVnIHRhZ0l0
ZXJhdG9yR1BSID0gcmVnVDE7Ci0gICAgR1BSUmVnIHBheWxvYWRJdGVyYXRvckdQUiA9IHJlZ1Qw
OwotCi0gICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKHRhZ0l0ZXJhdG9yR1BSKSk7Ci0gICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJ
Zk5vdE9iamVjdChwYXlsb2FkSXRlcmF0b3JHUFIpKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG5l
eHRWUmVnID0gYnl0ZWNvZGUubV9uZXh0OwotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9
IHZtKCkucHJvcGVydHlOYW1lcy0+bmV4dC5pbXBsKCk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKAotICAgICAgICBieXRlY29kZSwKLSAgICAgICAgb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplLCAvLyBvcGVyYXRpb24KLSAgICAgICAgbmV4dFZSZWcsIC8vIHJlc3VsdAotICAg
ICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Ly8gYXJnMQotICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJnMgotICAgICAgICBKU1ZhbHVl
UmVncyh0YWdJdGVyYXRvckdQUiwgcGF5bG9hZEl0ZXJhdG9yR1BSKSwgLy8gYXJnMwotICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
KS5yYXdCaXRzKCkpOyAvLyBhcmc0Ci0gICAgCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICBhdXRvIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBub3RP
YmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0
b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSkpOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwot
ICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewotICAgICAgICBzd2l0Y2ggKGlu
c3RydWN0aW9uLT53aWR0aCgpKSB7Ci0gICAgICAgIGNhc2UgTmFycm93OiByZXR1cm4gaXRlcmF0
b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7Ci0gICAgICAgIGNhc2UgV2lkZTE2OiByZXR1cm4gaXRl
cmF0b3JfbmV4dF90cnlfZmFzdF93aWRlMTY7Ci0gICAgICAgIGNhc2UgV2lkZTMyOiByZXR1cm4g
aXRlcmF0b3JfbmV4dF90cnlfZmFzdF93aWRlMzI7Ci0gICAgICAgIGRlZmF1bHQ6IFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9KSgpOwotCi0gICAgSlNWYWx1
ZVJlZ3MgbmV4dFJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmV4dCwgbmV4dFJlZ3MpOwotICAgIEp1bXAgZ2VuZXJpY0Nhc2UgPSBicmFu
Y2hJZk5vdEVtcHR5KG5leHRSZWdzKTsKLQotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7Ci0gICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKLSAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVy
YXRpb25Nb2RlOjpHZW5lcmljKSkpOwotCi0gICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAg
ICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNl
dE9mU2Vlbk1vZGVzKCksIHJlZ1QwKTsKLSAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKLSAgICBzdG9yZThU
b01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9m
U2Vlbk1vZGVzKCkpOwotICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0
aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50
KCk7Ci0gICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4gcmVn
VDEsIHJlZ1QwCi0KLSAgICBHUFJSZWcgdGFnVmFsdWVHUFIgPSByZWdUMTsKLSAgICBHUFJSZWcg
cGF5bG9hZFZhbHVlR1BSID0gcmVnVDA7Ci0gICAgICAgIAotICAgIEdQUlJlZyB0YWdEb25lR1BS
ID0gcmVnVDU7Ci0gICAgR1BSUmVnIHBheWxvYWREb25lR1BSID0gcmVnVDQ7Ci0KLSAgICB7Ci0g
ICAgICAgIEpTVmFsdWVSZWdzIGRvbmVSZWdzID0gSlNWYWx1ZVJlZ3ModGFnRG9uZUdQUiwgcGF5
bG9hZERvbmVHUFIpOwotCi0gICAgICAgIEdQUlJlZyB0YWdJdGVyUmVzdWx0R1BSID0gcmVnVDM7
Ci0gICAgICAgIEdQUlJlZyBwYXlsb2FkSXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgICAgICAK
LSAgICAgICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBn
ZXQgYnkgaWQgYmVsb3cuCi0gICAgICAgIG1vdmUocmVnVDEsIHRhZ0l0ZXJSZXN1bHRHUFIpOwot
ICAgICAgICBtb3ZlKHJlZ1QwLCBwYXlsb2FkSXRlclJlc3VsdEdQUik7Ci0KLSAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRhZ0l0ZXJSZXN1bHRHUFIpOwotCi0gICAgICAgIFJl
Z2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHRhZ1ZhbHVlR1BSKTsKLSAgICAg
ICAgcHJlc2VydmVkUmVncy5hZGQocGF5bG9hZFZhbHVlR1BSKTsKLSAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAotICAgICAg
ICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCi0gICAgICAgICAgICBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksCi0gICAgICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpKSksCi0gICAgICAgICAgICBwcmVzZXJ2ZWRSZWdzLAotICAg
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwKLSAgICAgICAgICAgIEpTVmFsdWVS
ZWdzKHRhZ0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwKLSAgICAgICAgICAg
IGRvbmVSZWdzLAotICAgICAgICAgICAgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAgIEFjY2Vz
c1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7Ci0KLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgZG9uZVJlZ3MpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZG9uZSwgZG9uZVJlZ3MpOwotICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwotICAg
IH0KLQotICAgIHsKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHRhZ1ZhbHVlR1BSLCBwYXlsb2FkVmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcgdGFnSXRlclJl
c3VsdEdQUiA9IHJlZ1QxOwotICAgICAgICBHUFJSZWcgcGF5bG9hZEl0ZXJSZXN1bHRHUFIgPSBy
ZWdUMDsKLQotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUNjsKLSAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyID0gcmVnVDc7Ci0gICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUg
PSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9u
ZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7Ci0KLSAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX3By
b2ZpbGVkQ29kZUJsb2NrLAotICAgICAgICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCi0gICAg
ICAgICAgICBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgICAgICBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCi0gICAgICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCku
cHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHRh
Z0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwKLSAgICAgICAgICAgIHJlc3Vs
dFJlZ3MsCi0gICAgICAgICAgICBJbnZhbGlkR1BSUmVnLAotICAgICAgICAgICAgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKLQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZXN1bHRSZWdzKTsKLQotICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7Ci0g
ICAgfQotCi0gICAgZmFzdENhc2UubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hv
dEZvckNoZWNrcG9pbnQoanVtcCgpKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7Ci0gICAgICAgIEdQUlJlZyB0YWdWYWx1ZUdQUiA9
IHJlZ1QxOwotICAgICAgICBHUFJSZWcgcGF5bG9hZFZhbHVlR1BSID0gcmVnVDA7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgR1BSUmVnIHRhZ0l0ZXJSZXN1bHRHUFIgPSByZWdUMzsKLSAgICAgICAg
R1BSUmVnIHBheWxvYWRJdGVyUmVzdWx0R1BSID0gcmVnVDI7Ci0gICAgICAgIAotICAgICAgICBH
UFJSZWcgdGFnRG9uZUdQUiA9IHJlZ1Q1OwotICAgICAgICBHUFJSZWcgcGF5bG9hZERvbmVHUFIg
PSByZWdUNDsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgICAgICBKdW1w
TGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxs
KHRhZ0l0ZXJSZXN1bHRHUFIpKTsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dE9iamVjdChwYXlsb2FkSXRlclJlc3VsdEdQUikpOwotCi0gICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7Ci0gICAgICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0g
ICAgICAgIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgICAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoCi0gICAgICAgICAgICBieXRl
Y29kZSwKLSAgICAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9u
Ci0gICAgICAgICAgICBkb25lVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAgICBUcnVzdGVkSW1t
UHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQotICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHRh
Z0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwgLy8gYXJnMwotICAgICAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsgLy8gYXJnNAotCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9u
ZVZSZWcsIEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxvYWREb25lR1BSKSk7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgSlNWYWx1ZVJlZ3ModGFn
VmFsdWVHUFIsIHBheWxvYWRWYWx1ZUdQUikpOwotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZWNrcG9pbnQoanVtcCgpKTsKLQotICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmpl
Y3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsK
LSAgICB9Ci0KLSAgICB7ICAgCi0gICAgICAgIEdQUlJlZyB0YWdJdGVyUmVzdWx0R1BSID0gcmVn
VDE7Ci0gICAgICAgIEdQUlJlZyBwYXlsb2FkSXRlclJlc3VsdEdQUiA9IHJlZ1QwOwotCi0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0gICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBp
ZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpOwotICAgICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotCi0gICAg
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSgKLSAgICAgICAgICAgIGJ5dGVjb2RlLAotICAgICAg
ICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAvLyBvcGVyYXRpb24KLSAgICAgICAgICAg
IHZhbHVlVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQotICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCksIC8vIGFyZzIKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0l0ZXJSZXN1bHRH
UFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwgLy8gYXJnMwotICAgICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsgLy8gYXJnNAotCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFVT
RShKU1ZBTFVFMzJfNjQpCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKaW5kZXggNjZiYzY3Nzg2ODYyYzExYzcxN2M4MGVlYzM4ZTFiYjI1ODk5Njli
YS4uOGU0Y2UwM2Y4ZWVlYzM0MGJiNjY2ZjUyNzlhNjg3NmRjMmM2ODg2MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgKQEAgLTE2MiwxMiArMTYyLDggQEAgcHVibGljOgogCiAgICAg
c3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oaml0
VHlwZSk7Ci0jZW5kaWYKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0lu
T3B0aW1pemluZ0pJVCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAppbmRleCAxZjM0YzNkMWRjZmY1MmUwNmEyODIxNTcx
MTgyZjkyZmZmZThjMDIxLi4zNGZiYjZiNTkwZmM0M2I5NjcyNWJkYWVjZjU2NTliYzdiZmYzMGMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgogI2luY2x1ZGUgIkpJVC5oIgorI2luY2x1ZGUgIkpJ
VElubGluZXMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
U3R1YkluZm8uaCIKIApAQCAtMTI4LDE2ICsxMjksMTQgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJh
dG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiAgICAgZ2VuZXJhdGVG
YXN0Q29tbW9uKGppdCwgbV9pc0xlbmd0aEFjY2VzcyA/IElubGluZUFjY2Vzczo6c2l6ZUZvckxl
bmd0aEFjY2VzcygpIDogSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9
CiAKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRJbmxp
bmVBY2Nlc3MoSklUJiBqaXQsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIGJhc2UsIEdQUlJl
ZyBzY3JhdGNoLCBHUFJSZWcgcmVzdWx0KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkSW5s
aW5lQWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEpTVmFsdWVSZWdzIGJhc2VK
U1IsIEdQUlJlZyBzY3JhdGNoLCBKU1ZhbHVlUmVncyByZXN1bHRKU1IpCiB7CiAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBkb25lOwogCi0gICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUpTUi5wYXlsb2FkR1BSKCksIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgIGF1dG8gc2tpcElubGlu
ZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOwogICAgIGppdC5sb2FkMzIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZC
eUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlLCBz
Y3JhdGNoLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBqaXQubG9hZFByb3BlcnR5KGJh
c2VKU1IucGF5bG9hZEdQUigpLCBzY3JhdGNoLCByZXN1bHRKU1IpOwogICAgIGF1dG8gZmluaXNo
ZWQgPSBqaXQuanVtcCgpOwogCiAgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOwpAQCAt
MTUzLDExICsxNTIsMTAgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWIKICAgICBtX3N0YXJ0ID0g
aml0LmxhYmVsKCk7CiAKICAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQ
Uik7Ci0gICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgZ2VuZXJhdGVH
ZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6YmFzZUpTUiwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoR1BSLCBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUik7CiAKICAgICBtX2RvbmUgPSBqaXQubGFi
ZWwoKTsKIH0KLSNlbmRpZgogCiBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBq
aXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLApAQCAtMTc3LDcgKzE3NSw2IEBAIHZvaWQg
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJiBqaXQpCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXpl
Rm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogdm9pZCBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChK
SVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CkBAIC0xODUsMTEg
KzE4MiwxMCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZwogICAgIG1fc3RhcnQgPSBqaXQubGFi
ZWwoKTsKIAogICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKLSAg
ICBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Moaml0LCBzdHViSW5mb0dQUiwgQmFzZWxpbmVH
ZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVn
aXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0
KTsKKyAgICBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Moaml0LCBzdHViSW5mb0dQUiwgQmFz
ZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2VKU1IsIEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpzY3JhdGNoR1BSLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lz
dGVyczo6cmVzdWx0SlNSKTsKIAogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwogfQotI2VuZGlm
CiAKIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
Q2FjaGVhYmxlSWRlbnRpZmllciwKQEAgLTIwMiw3ICsxOTgsNiBAQCBKSVRQdXRCeUlkR2VuZXJh
dG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMu
Y2xlYXIoc2NyYXRjaCk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogdm9pZCBKSVRQdXRCeUlk
R2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2ln
bmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
SklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOwpAQCAtMjExLDE3ICsyMDYsMTIgQEAgdm9p
ZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklU
JiBqaXQsIHVuc2lnbmVkIHN0dWIKIAogICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0
dWJJbmZvR1BSKTsKIAotICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOwotICAgIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
c2NyYXRjaDI7Ci0gICAgR1BSUmVnIHZhbHVlID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2
YWx1ZTsKKyAgICB1c2luZyBuYW1lc3BhY2UgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOwogCi0g
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwotCi0gICAgaml0LmxvYWQzMihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRj
aCk7Ci0gICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVy
czo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7
Ci0gICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBq
aXQuc3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIGJhc2UsIHNjcmF0Y2gsIHNj
cmF0Y2gyKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlSlNSLnBh
eWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7Cisg
ICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBq
aXQuc3RvcmVQcm9wZXJ0eSh2YWx1ZUpTUiwgYmFzZUpTUi5wYXlsb2FkR1BSKCksIHNjcmF0Y2hH
UFIsIHNjcmF0Y2gyR1BSKTsKICAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKIAogICAg
IHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKQEAgLTIzMCw3ICsyMjAsNiBAQCB2b2lkIEpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGpp
dCwgdW5zaWduZWQgc3R1YgogICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CiAgICAgbV9kb25lID0g
aml0LmxhYmVsKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiB7CkBAIC0zODMsNyArMzcyLDYgQEAg
dm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXIm
IGppdCkKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQ
cm9wZXJ0eUFjY2VzcygpKTsKIH0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCiB2b2lkIEpJVEluQnlJ
ZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNp
Z25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKQEAgLTM5MiwxNSArMzgwLDEzIEBAIHZv
aWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklU
JiBqaXQsIHVuc2lnbmVkIHN0dWJJCiAKICAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBz
dHViSW5mb0dQUik7CiAKLSAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpiYXNlOwotICAgIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVz
dWx0OwotICAgIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnNjcmF0
Y2g7CisgICAgdXNpbmcgbmFtZXNwYWNlIEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOwogCiAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwogCi0gICAgaml0LmxvYWQzMihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7
Ci0gICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7Ci0g
ICAgaml0LmJveEJvb2xlYW4odHJ1ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgaml0
LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUpTUi5wYXlsb2FkR1BSKCksIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGF1dG8gc2tpcElubGlu
ZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5ib3hCb29sZWFu
KHRydWUsIHJlc3VsdEpTUik7CiAgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CiAKICAg
ICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CkBAIC00MDksNyArMzk1LDYgQEAgdm9pZCBK
SVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGpp
dCwgdW5zaWduZWQgc3R1YkkKICAgICBmaW5pc2hlZC5saW5rKCZqaXQpOwogICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOwogfQotI2VuZGlmCiAKIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OkpJVElu
c3RhbmNlT2ZHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0
VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgKaW5kZXggMmY2OWY2NGVjMTYxYWU5MDQzZTRkYzg2MGMzODQ5NjQ5MTljNmFkZS4uMGQ2
YzllZDU2ZDMwODI1N2JiYjg3ODFmYTU4MDNlZmE2NTQ2NTc5ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtNDYsMTEy
ICs0NiwxOTUgQEAgc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiBlbnVtIGNsYXNz
IEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitu
YW1lc3BhY2UgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LXN0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnMgewotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdU
MTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsK
LSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKLX07
Ci0KLXN0cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZUVudW1lcmF0
b3JHZXRCeVZhbFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0g
R1BSSW5mbzo6cmVnVDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMjsKLSAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJs
b2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgot
ICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5KTsKLSAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwotICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OwotICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Ci19OwotCi1zdHJ1Y3QgQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQg
PSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQ
UkluZm86OmFyZ3VtZW50R1BSMjsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOwotfTsKLQotc3RydWN0IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
ID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BS
SW5mbzo6cmVnVDE7Ci0gICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2UpOwotICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOwotfTsKLQotc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGRvbnRDbG9iYmVyUmVnaXN0ZXIgPSBHUFJJbmZv
OjpyZWdUMzsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOwotfTsKLQotc3Ry
dWN0IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyByZXN1bHQgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwotfTsKLQotc3RydWN0IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5m
bzo6cmVnVDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUMzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6
cmVnVDI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpy
ZWdUNDsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzIHsKLSAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKLSAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OwotfTsKLQotc3RydWN0IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmQgPSBH
UFJJbmZvOjpyZWdUMTsKLSAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZSk7Ci0gICAgc3RhdGljX2Fzc2VydChicmFuZCA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKLX07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFz
ZUpTUiB7IEdQUkluZm86OnJlZ1QxIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlK
U1IgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7
IHByb3BlcnR5SlNSIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6
cmVnVDMgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1QyIH07
CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1Ig
eyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBwcm9wZXJ0eUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9OworY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IHByb3BlcnR5SlNSIH07Citjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDcgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaEdQUiB7IEdQUkluZm86OnJlZ1Q2IH07CiAjZW5kaWYKK30KKworbmFtZXNwYWNlIEJhc2Vs
aW5lRGVsQnlJZFJlZ2lzdGVycyB7CisjaWYgVVNFKEpTVkFMVUU2NCkKK2NvbnN0ZXhwciBKU1Zh
bHVlUmVncyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVn
cyByZXN1bHRKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiB7IEdQUkluZm86OnJlZ1QzIH07Citjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgeyBH
UFJJbmZvOjpyZWdUMiB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1Zh
bHVlUmVncyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDMsIEdQUkluZm86OnJlZ1QyIH07Citjb25z
dGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJl
Z1QwIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDcgfTsK
K2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1Q2IH07CisjZW5kaWYK
K30KKworbmFtZXNwYWNlIEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgeworI2lmIFVTRShKU1ZB
TFVFNjQpCitjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07
Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1IgeyBHUFJJbmZvOjpyZWdUMSB9Owor
Y29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IGJhc2VKU1IgfTsKK2NvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMiB9OworY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoR1BSIHsgR1BSSW5mbzo6cmVnVDMgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCitj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpy
ZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNSIHsgR1BSSW5mbzo6cmVn
VDMsIEdQUkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSIHsg
YmFzZUpTUiB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OnJlZ1Q3
IH07Citjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgeyBHUFJJbmZvOjpyZWdUNiB9OworI2Vu
ZGlmCit9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorbmFtZXNwYWNlIEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzIHsKK3N0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpT
UiB7IEdQUkluZm86OnJlZ1QwIH07CitzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3Bl
cnR5SlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsKK3N0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
cmVzdWx0SlNSIHsgR1BSSW5mbzo6cmVnVDAgfTsKK3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gR1BSSW5mbzo6cmVnVDI7CisvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5r
aW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFs
IFN0dWJJbmZvLgorc3RhdGljX2Fzc2VydChiYXNlSlNSID09IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2VKU1IpOworc3RhdGljX2Fzc2VydChwcm9wZXJ0eUpTUiA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUik7CitzdGF0aWNfYXNzZXJ0KHJlc3VsdEpTUiA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHRKU1IpOworc3RhdGljX2Fzc2VydChz
dHViSW5mb0dQUiA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mb0dQUik7CisK
K3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CitzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0Oworc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK30KKyNlbmRpZgorCitu
YW1lc3BhY2UgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorY29uc3RleHByIEdQUlJlZyByZXN1bHQgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHBy
IEdQUlJlZyB2YWx1ZSB7IEdQUkluZm86OmFyZ3VtZW50R1BSMiB9OworY29uc3RleHByIEdQUlJl
ZyBwcm90byB7IEdQUkluZm86OmFyZ3VtZW50R1BSMyB9OworY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mbyB7IEdQUkluZm86OmFyZ3VtZW50R1BSMSB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MSB7IEdQUkluZm86Om5vbkFyZ0dQUjAgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgeyBH
UFJJbmZvOjpub25BcmdHUFIxIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVS
ZWdzIHZhbHVlSlNSICB7IEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5mbzo6YXJndW1lbnRH
UFIyIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvdG9KU1IgIHsgR1BSSW5mbzo6cmVnVDYs
IEdQUkluZm86OnJlZ1Q3IH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5m
bzo6cmVnVDEgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDFHUFIgeyBHUFJJbmZvOjpyZWdU
NCB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMkdQUiB7IEdQUkluZm86OnJlZ1Q1IH07Citz
dGF0aWNfYXNzZXJ0KCF2YWx1ZUpTUi51c2VzKHJlc3VsdEdQUikpOworc3RhdGljX2Fzc2VydCgh
dmFsdWVKU1Iub3ZlcmxhcHMocHJvdG9KU1IpKTsKK3N0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVz
ZXMoc3R1YkluZm9HUFIpKTsKK3N0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoc2NyYXRjaDFH
UFIpKTsKK3N0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoc2NyYXRjaDJHUFIpKTsKKyNlbmRp
ZgorfQorCituYW1lc3BhY2UgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdUMCB9
OworY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsK
K2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRKU1IgeyBiYXNlSlNSIH07Citjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1QzIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQor
Y29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6
cmVnVDAgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiAgeyBHUFJJbmZvOjpy
ZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRKU1Ig
eyBiYXNlSlNSIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVn
VDcgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1Q2IH07Cisj
ZW5kaWYKK3N0YXRpY19hc3NlcnQoYmFzZUpTUiA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlSlNSKTsKK3N0YXRpY19hc3NlcnQocHJvcGVydHlKU1IgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHlKU1IpOworfQorCituYW1lc3BhY2UgQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJh
c2VKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdEpT
UiB7IGJhc2VKU1IgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpy
ZWdUMSB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSIHsgR1BSSW5mbzo6cmVnVDIgfTsK
K2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBkb250Q2xvYmJlckpTUiB7IEdQUkluZm86OnJlZ1QzIH07
CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1Ig
eyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVn
cyByZXN1bHRKU1IgeyBiYXNlSlNSIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsg
R1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86
OnJlZ1QzIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgZG9udENsb2JiZXJKU1IgeyBHUFJJbmZv
OjpyZWdUNiwgR1BSSW5mbzo6cmVnVDcgfTsKKyNlbmRpZgorfQorCituYW1lc3BhY2UgQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgeworI2lmIFVTRShKU1ZBTFVFNjQpCitjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MgcmVzdWx0SlNSIHsgYmFzZUpTUiB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHRo
aXNKU1IgeyBHUFJJbmZvOjpyZWdUMSB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7
IEdQUkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgeyBHUFJJbmZv
OjpyZWdUMyB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIg
SlNWYWx1ZVJlZ3MgcmVzdWx0SlNSIHsgYmFzZUpTUiB9OworY29uc3RleHByIEpTVmFsdWVSZWdz
IHRoaXNKU1IgeyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUNyB9OworY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoR1BSIHsgR1BSSW5mbzo6cmVnVDYgfTsKKyNlbmRpZgorfQorCituYW1lc3BhY2UgQmFz
ZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVn
cyByZXN1bHRKU1IgeyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUiB9OworY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm9HUFIgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6c2NyYXRjaEdQUiB9OworfQorCituYW1lc3BhY2UgQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJh
c2VKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNS
IHsgR1BSSW5mbzo6cmVnVDEgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJ
bmZvOjpyZWdUMyB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSIHsgR1BSSW5mbzo6cmVn
VDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDJHUFIgeyBHUFJJbmZvOjpyZWdUNCB9Owor
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsg
R1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
dmFsdWVKU1IgeyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUNyB9OworY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoR1BSIHsgR1BSSW5mbzo6cmVnVDYgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDJH
UFIgeyBHUFJJbmZvOjpyZWdUNCB9OworI2VuZGlmCit9CisKK25hbWVzcGFjZSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVS
ZWdzIGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHBy
b3BlcnR5SlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1
ZUpTUiB7IEdQUkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsg
R1BSSW5mbzo6cmVnVDQgfTsKK2NvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiB7IEdQUkluZm86
OnJlZ1QzIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHByIEpTVmFsdWVSZWdz
IGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKK2NvbnN0ZXhwciBK
U1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiB7IEdQUkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdUMiB9
OworY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSIHsgR1BSSW5mbzo6cmVnVDYsIEdQUklu
Zm86OnJlZ1Q3IH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVn
VDQgfTsKK2NvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiB7IEdQUkluZm86OnJlZ1Q1IH07Cisj
ZW5kaWYKK30KKworbmFtZXNwYWNlIEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJbmZv
OjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIGJyYW5kSlNSIHsgR1BSSW5mbzo6cmVn
VDEgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMiB9Owor
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsg
R1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
YnJhbmRKU1IgeyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUNyB9OworI2VuZGlmCitzdGF0aWNfYXNz
ZXJ0KGJhc2VKU1IgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUik7CitzdGF0
aWNfYXNzZXJ0KGJyYW5kSlNSID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
SlNSKTsKK30KIAogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAppbmRleCBlOGU1Nzg4ODQyMTg4ZTY4
NTc1NzZiZGI2ZWMzMjZhOWFmZjhjZDlhLi5hOTE0MmQ4ZjA1Mzg1ZmU2ZWUyYWQxMGM5YTQ3YzIw
ZTg5YWE1ZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtMzY2
LDE4ICszNjYsMTggQEAgaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFIKICNlbmRpZgogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHB0cmRpZmZfdCBvZmZzZXRP
ZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIp
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSwgSlNWYWx1
ZVJlZ3MgY2VsbEpTUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewogICAgIGlmIChzaG91bGRF
bWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2VsbEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKGNlbGxKU1IucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNv
ZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKICAgICB9CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3Rl
cklEIHNjcmF0Y2hHUFIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIGNlbGxKU1IsIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUikKIHsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSAr
IEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIsIHNj
cmF0Y2hHUFIpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwg
Qnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxl
OjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEpTUiwgc2NyYXRjaEdQUik7CiB9
CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQpAQCAtNjQzLDYgKzY0MywxNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZykpOwogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3MgcmVnKQoreworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKEpTVmFsdWVSZWdzIGpzUmVnLCBW
aXJ0dWFsUmVnaXN0ZXIgdlJlZykKK3sKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQorICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoanNSZWcpOworfQorCiBBTFdBWVNfSU5M
SU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBp
bnQgdGFyZ2V0KQogewogICAgIGlmICh0YXJnZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAppbmRleCAxYzQ0ZmRlZmQ4NWM5YWU4YmUxODRjOTg0Y2YxYzcwZTMzZjNh
NzBjLi44ZDU1YzFjNmJlYzE1NWUyZmI5MjlkMDZlN2MwODE3MGMzYzA1NWRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTM3MSwyNiArMzcxLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBBU1NFUlQoY2FsbEZyYW1lUmVnaXN0ZXIgIT0gcmVnVDEpOwotICAgIEFTU0VSVChyZWdUMSAh
PSByZXR1cm5WYWx1ZUdQUik7Ci0gICAgQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLQotICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCi0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7Ci0KLSNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKLSAgICByZXQoKTsKLSNlbHNlCi0gICAgZW1pdE5ha2VkTmVhckp1bXAodm0oKS5n
ZXRDVElTdHViKG9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKS5jb2RlKCkpOwotI2VuZGlmCi19Ci0K
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggYTJiZjZlYjNm
NzU0ZWIxYTE3Y2RjNzYzMzUwNzkzOWQzMTlhYmQzNi4uNzkwMTcyZWY3M2U3OWExYTEyMDA3MjYx
NWZhNzI5MGJiNTk1OTZlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcApAQCAtMTUyLDI4ICsxNTIsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5k
cyBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ug
d2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBm
b3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0TG9hZFBheWxvYWQodmFsdWUsIHJlZ1QyKTsKLSAgICBl
bWl0TG9hZFBheWxvYWQocHJvdG8sIHJlZ1QxKTsKKyAgICB1c2luZyBuYW1lc3BhY2UgQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzOworCisgICAgZW1pdExvYWRQYXlsb2FkKHZhbHVlLCB2YWx1
ZUpTUi5wYXlsb2FkR1BSKCkpOworICAgIGVtaXRMb2FkUGF5bG9hZChwcm90bywgcHJvdG9KU1Iu
cGF5bG9hZEdQUigpKTsKIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNl
VmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9y
IFN5bWJvbC5oYXNJbnN0YW5jZS4KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFs
dWUpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90byk7CiAgICAgCiAgICAg
SklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVl
Ci0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICBJbnZhbGlkR1BSUmVnLAotICAgICAg
ICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHJlc3Vs
dEdQUiwKKyAgICAgICAgdmFsdWVKU1IucGF5bG9hZEdQUigpLAorICAgICAgICBwcm90b0pTUi5w
YXlsb2FkR1BSKCksCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBzY3JhdGNoMUdQUiwg
c2NyYXRjaDJHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBhZGRUb0NvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFu
Y2VPZnMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsK
KyAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTkyLDEyICsyMDAs
MjkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8g
PSBieXRlY29kZS5tX3Byb3RvdHlwZTsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
JiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwotICAgIAorCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgZW1pdExvYWRUYWcodmFsdWUsIHJl
Z1QwKTsKLSAgICBlbWl0TG9hZFRhZyhwcm90bywgcmVnVDMpOwotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCBkc3QsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVn
VDAsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QxKSk7Ci0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIHVzaW5nIFNsb3dPcGVyYXRp
b24gPSBkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJh
dGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVk
QXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICB1c2luZyBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnZhbHVlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6cHJvdG9KU1I7CisgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUpTUiA9PSBwcmVmZXJy
ZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpKTsKKyAgICAvLyBQcm90byB3aWxsIGJl
IHBhc3NlZCBvbiBzdGFjaywganVzdCBtYWtlIHN1cmUgbm8gb3ZlcmxhcAorICAgIHN0YXRpY19h
c3NlcnQoIXByb3RvSlNSLnVzZXMoZ2xvYmFsT2JqZWN0R1BSKSk7CisgICAgc3RhdGljX2Fzc2Vy
dCghcHJvdG9KU1IudXNlcyhzdHViSW5mb0dQUikpOworICAgIHN0YXRpY19hc3NlcnQoIXByb3Rv
SlNSLm92ZXJsYXBzKHZhbHVlSlNSKSk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdExvYWRUYWcodmFsdWUsIHZhbHVlSlNSLnRh
Z0dQUigpKTsKKyAgICBlbWl0TG9hZFRhZyhwcm90bywgcHJvdG9KU1IudGFnR1BSKCkpOworICAg
IGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAg
IGRzdCwKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgdmFsdWVKU1IsIHBy
b3RvSlNSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAppbmRleCBmZmRiOTdlNDYzOTc5NDUzZDAwZGU3NmFkMDg3MzgwODZhM2U4N2Fk
Li5kMzVkMjY4ZjdjMGU3YWE2MTk1ODg1OGJmZjdmZjBiNmRjNmE3MjA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNDQsNyArNDQs
NiBAQAogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlND
IHsKLSNpZiBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC01MywyOSArNTIsMjQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICB1c2luZyBuYW1lc3BhY2UgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJv
cGVydHlKU1IpOwogCiAgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVt
YmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChiYXNlR1BSKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5
dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKGJhc2VKU1IpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYnl0ZWNvZGUsIGJhc2VKU1IsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CiAgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRz
dCwgc2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hH
UFIsIGJhc2VKU1IsIHByb3BlcnR5SlNSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7Ci0KLSAg
ICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlSlNSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlSlNSLCBzY3JhdGNoR1BSKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciBnZW4oCiAgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisgICAgICAgICAgICBiYXNl
SlNSLCBwcm9wZXJ0eUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwpAQCAtOTMsMTkgKzg3LDExIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdl
bik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0SlNSKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEpTUik7CiAgICAgfQogfQogCi0jaWYgIU9TKFdJTkRP
V1MpCi1zdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVudEdQUjQgPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjQ7Ci1zdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVudEdQ
UjUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjU7Ci0jZWxzZQotc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmlhYmxlQXJndW1lbnRHUFI0ID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKLXN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNSA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Ci0j
ZW5kaWYKLQogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0
ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CkBAIC0xMjEsMTMgKzEwNywyNCBAQCB2b2lk
IEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2Rl
LCBWZWN0b3I8U2xvd0Nhc2VFbgogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIHN0YXRpY19hc3NlcnQoYXJndW1l
bnRHUFIzICE9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKLSAgICBtb3Zl
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7Ci0gICAgbW92
ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgdmlhYmxlQXJndW1lbnRHUFI0
KTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPihi
eXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVBcmd1bWVudEdQUjQpOworICAgIHVzaW5nIFNs
b3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNs
b3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMj4o
KTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJnM0pTUiA9IHByZWZlcnJlZEFyZ3VtZW50
SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFyZzRK
U1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCA0PigpOworCisgICAgc3Rh
dGljX2Fzc2VydCghQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUi5vdmVybGFwcyhh
cmc0SlNSKSk7CisgICAgbW92ZVZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eUpTUiwgYXJnNEpTUik7CisgICAgbW92ZVZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlSlNSLCBhcmczSlNSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgc2NyYXRjaEdQUik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPFNsb3dPcGVyYXRp
b24+KAorICAgICAgICBieXRlY29kZSwKKyAgICAgICAgQWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwKKyAgICAgICAgZHN0LAor
ICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBhcmczSlNS
LCBhcmc0SlNSKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0Miw4ICsx
MzksOCBAQCB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5
cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJn
dW1lbnRHUFIxKTsKLSAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2UgPT0gcmVnVDApOwotICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHkgPT0gcmVnVDEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCkgPT0gcmVnVDApOworICAgIHN0YXRp
Y19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHlKU1IucGF5bG9hZEdQ
UigpID09IHJlZ1QxKTsKIAogICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9m
aWxlKCksIHByb2ZpbGVHUFIpOwpAQCAtMTgxLDggKzE3OCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQ
UjU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBh
eWxvYWRHUFIoKTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIApAQCAtMjA5LDE5ICsyMDYsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgdXNpbmcgbmFtZXNwYWNl
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VKU1IpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5SlNSKTsKIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworICAgICAgICBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGJhc2VKU1IsIHByb3BlcnR5SlNSLCByZXN1
bHRKU1IsIHN0dWJJbmZvR1BSKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOwpAQCAtMjM0LDggKzIyOCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEpTUik7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEpTUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yNTAsMTEgKzI0NCwy
MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjMpOwotICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
KT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRl
Y2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlv
biwgMD4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJn
dW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
YmFzZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAg
Y29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8
U2xvd09wZXJhdGlvbiwgMz4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYmFzZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCBwcm9wZXJ0eUpTUik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPFNsb3dP
cGVyYXRpb24+KAorICAgICAgICBieXRlY29kZSwKKyAgICAgICAgQWRkcmVzcyhzdHViSW5mb0dQ
UiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwKKyAgICAgICAg
ZHN0LAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNlSlNSLCBwcm9w
ZXJ0eUpTUik7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yNjQsOCArMjY4
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpT
Ui5wYXlsb2FkR1BSKCk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKQEAgLTMyNCwxNyArMzI4LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9w
cml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICB1c2luZyBuYW1lc3BhY2UgQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJyYW5kLCBicmFuZEpTUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VK
U1IsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKICAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQ
cml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1Yklu
Zm9HUFIpOworICAgICAgICBiYXNlSlNSLCBicmFuZEpTUiwgc3R1YkluZm9HUFIpOwogCiAgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0
ZUJyYW5kOwpAQCAtMzY1LDExICszNjcsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9w
cml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKLSAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKLSAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisK
KyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJy
YW5kT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJl
ZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4o
KTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50
SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJyYW5k
SlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKTsKKworICAgIGxv
YWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUpTUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBicmFuZEpTUik7CisgICAgY2FsbE9wZXJh
dGlvbjxTbG93T3BlcmF0aW9uPigKKyAgICAgICAgQWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwKKyAgICAgICAgZ2xvYmFsT2Jq
ZWN0R1BSLCBzdHViSW5mb0dQUiwgYmFzZUpTUiwgYnJhbmRKU1IpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMzc5LDggKzM5MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kSlNSLnBheWxvYWRHUFIoKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAt
Mzk5LDE4ICs0MTAsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5
dGVjb2RlLm1fYnJhbmQ7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5k
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgdXNpbmcgbmFtZXNwYWNlIEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5k
LCBicmFuZEpTUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UpOwog
CiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFu
ZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7Cisg
ICAgICAgIGJhc2VKU1IsIGJyYW5kSlNSLCBzdHViSW5mb0dQUik7CiAKICAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsK
QEAgLTQzNSwxMSArNDQ0LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRl
X2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7
Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9w
dGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMyk7CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9w
ZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4o
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRH
UFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpT
UiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIGJyYW5kSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJh
dGlvbiwgMz4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYmFz
ZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBicmFu
ZEpTUik7CisgICAgY2FsbE9wZXJhdGlvbjxTbG93T3BlcmF0aW9uPigKKyAgICAgICAgQWRkcmVz
cyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgYmFzZUpTUiwgYnJhbmRK
U1IpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDQ5LDggKzQ2Niw4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJy
YW5kSlNSLnBheWxvYWRHUFIoKTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0g
YXJndW1lbnRHUFIxKTsKIApAQCAtNDYzLDExICs0ODAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX3B1dF9ieV92YWw8T3BQdXRC
eVZhbERpcmVjdD4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC00NzYsMjMgKzQ4OCwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnZhbHVlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHVzaW5n
IG5hbWVzcGFjZSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
dmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpTUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlKU1IpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlSlNSKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VKU1IsIHByb2ZpbGVHUFIpOwogICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAg
YmFzZUpTUiwgcHJvcGVydHlKU1IsIHZhbHVlSlNSLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7
CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKQEAgLTUxNyw2ICs1MjUsMTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7
CiB9CiAKK3RlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4o
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0X29w
X3B1dF9ieV92YWw8T3BQdXRCeVZhbERpcmVjdD4oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
ICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X3B1dF9ieV92YWxfZGlyZWN0OwpAQCAtNTQ0LDE3ICs1NTksMjYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBm
YXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7Ci0gICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCB2aWFibGVBcmd1bWVu
dEdQUjQpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25QdXRC
eVZhbFN0cmljdE9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQ
UiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0
aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiA9IHByZWZl
cnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIHZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4o
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRH
UFI8U2xvd09wZXJhdGlvbiwgND4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIg
PSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCA1PigpOworCisgICAgbG9hZEds
b2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJv
cGVydHlKU1IpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlSlNSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCks
IE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCB2aWFi
bGVBcmd1bWVudEdQUjUpOworICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGly
ZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAg
ZWxzZQotICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBPcFB1dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSwgdmlhYmxlQXJndW1lbnRHUFI1KTsKLSAgICBjYWxsT3BlcmF0aW9uPGRl
Y2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpPihBZGRyZXNzKHZpYWJsZUFy
Z3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2
aWFibGVBcmd1bWVudEdQUjQsIHZpYWJsZUFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+
KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxl
R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAgICAgICBBZGRyZXNz
KHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIGJhc2VKU1IsIHByb3BlcnR5SlNSLCB2YWx1ZUpT
Uiwgc3R1YkluZm9HUFIsIHByb2ZpbGVHUFIpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtNTk1LDE0ICs2MTksMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXQKICAgICAg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFs
T2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJh
c2VKU1IucGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCk7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZh
bHVlSlNSLnBheWxvYWRHUFIoKTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
cmVnVDQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlR1BSOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICB7Ci0gICAgICAgIFJlZ2lzdGVyU2V0
IHVzZWQoQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHksIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlLCBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZChiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIHByb2ZpbGVHUFIpOwogICAgICAgICBB
U1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsKICAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRh
aW5zKHJlZ1Q1KSk7CiAgICAgfQpAQCAtNjMyLDIwICs2NTYsMTcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgdXNpbmcgbmFtZXNw
YWNlIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUpTUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVKU1IpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlSlNSLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2
YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYmFz
ZUpTUiwgcHJvcGVydHlKU1IsIHZhbHVlSlNSLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7
CiAKICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQ
dXRQcml2YXRlTmFtZTsKQEAgLTY3OCwxMiArNjk5LDIxIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CiAKLSAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIzKTsKLSAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHZpYWJsZUFyZ3VtZW50R1BSNCk7
Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZh
dGVGaWVsZE9wdGltaXplKT4oQWRkcmVzcyh2aWFibGVBcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0LCBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUo
b3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3Bl
cmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSID0gcHJlZmVy
cmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1
ZVJlZ3MgcHJvcGVydHlKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAy
PigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDQ+KCk7CisKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcHJvcGVydHlKU1IpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVKU1IpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGNh
bGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGds
b2JhbE9iamVjdEdQUiwgYmFzZUpTUiwgcHJvcGVydHlKU1IsIHZhbHVlSlNSLCBzdHViSW5mb0dQ
UiwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC03MTYsOSArNzQ2LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEcKICAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBheWxvYWRHUFIoKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
dmFsdWVKU1IucGF5bG9hZEdQUigpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7
CiAKQEAgLTc0Miw2ICs3NzIsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsRwogfQogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKQEAgLTc5NSw2ICs4MjcsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCBy
ZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJ
ZD4oKTsKQEAgLTgwMiwxNyArODM2LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVy
czo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICB1c2lu
ZyBuYW1lc3BhY2UgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
SlNSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZSk7CiAg
ICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAog
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgYmFzZUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQ
Uik7CiAKICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpEZWxldGVCeUlEOwpAQCAtODI1LDggKzg1Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRK
U1IucGF5bG9hZEdQUigpLCByZXN1bHRKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRKU1IpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBl
bWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJy
aWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTg0OSwxMCArODgwLDE4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBhcmd1bWVudEdQUjIpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeUlk
T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgdXNpbmcgU2xvd09wZXJhdGlv
biA9IGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0
aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJyZWRB
cmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBiYXNlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VKU1IpOworICAgIGNhbGxPcGVyYXRpb248
U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGdsb2JhbE9iamVjdEdQ
Uiwgc3R1YkluZm9HUFIsIGJhc2VKU1IsCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtODc2LDggKzkxNSwxMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVH
UFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICB1c2luZyBCYXNlbGluZURl
bEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUjsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdEpTUi5w
YXlsb2FkR1BSKCkgPT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgYm94Qm9vbGVh
bihyZXN1bHRKU1IucGF5bG9hZEdQUigpLCByZXN1bHRKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRKU1IpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIApAQCAtOTI1LDE5ICs5NjcsMTYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgdXNpbmcgbmFtZXNw
YWNlIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9w
ZXJ0eSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlKU1IpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUpTUiwgcHJvcGVydHkpOwogCiAgICAgSklURGVsQnlWYWxH
ZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gp
OworICAgICAgICBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUiwg
c2NyYXRjaEdQUik7CiAKICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKQEAgLTk1MCw4ICs5ODksOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgYm94Qm9v
bGVhbihyZXN1bHRKU1IucGF5bG9hZEdQUigpLCByZXN1bHRKU1IpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRKU1IpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3Jp
dGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xv
YmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTk3NCwxMSArMTAxMywxOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSkpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVy
YXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dP
cGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVm
ZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBwcm9wZXJ0eUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24s
IDM+KCk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUpTUik7CisgICAgY2FsbE9wZXJh
dGlvbjxTbG93T3BlcmF0aW9uPigKKyAgICAgICAgQWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwKKyAgICAgICAgZ2xvYmFsT2Jq
ZWN0R1BSLCBzdHViSW5mb0dQUiwgYmFzZUpTUiwgcHJvcGVydHlKU1IsIFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTEwMDIsOCArMTA0OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAg
IHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKKyAgICB1c2luZyBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUjsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHJlc3VsdEpTUi5wYXlsb2FkR1BSKCkgPT0gR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworCisgICAgYm94Qm9vbGVhbihyZXN1bHRKU1IucGF5bG9hZEdQUigpLCByZXN1
bHRKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRKU1IpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIApAQCAt
MTA1MSwxNiArMTEwMSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHVzaW5nIG5h
bWVzcGFjZSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VKU1IpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBi
YXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRy
eUdldEJ5SWQpOworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgYmFzZUpT
UiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAKICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRC
eUlkOwpAQCAtMTA3Myw4ICsxMTIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdEpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXN1bHRK
U1IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpAQCAtMTA5MCwxMCArMTEzOCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
bwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3Vt
ZW50R1BSMik7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZl
cnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7
CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpT
UjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBiYXNlSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAg
ICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLAorICAgICAgICByZXN1bHRWUmVnLAorICAgICAgICBnbG9iYWxPYmplY3RH
UFIsIHN0dWJJbmZvR1BSLCBiYXNlSlNSLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTEwMyw3ICsxMTYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG8KICAgICBtb3ZlKEpJVDo6
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNl
SlNSLnBheWxvYWRHUFIoKTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CiAKQEAgLTExMjYsMTYgKzExODMsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0KTsKKyAgICB1c2luZyBuYW1lc3BhY2UgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlSlNSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCiAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJ
bmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksIGJhc2VKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIsIEFjY2Vz
c1R5cGU6OkdldEJ5SWREaXJlY3QpOwogCiAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKQEAgLTExNDgsOCArMTIwMyw4IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRS
ZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEpTUik7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXN1bHRKU1IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTE2NSwxMCAr
MTIyMCwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZQogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk+
KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERp
cmVjdE9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+
KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVu
dEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxP
YmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBiYXNlSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8U2xvd09w
ZXJhdGlvbj4oCisgICAgICAgIGJ5dGVjb2RlLAorICAgICAgICBBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwKKyAgICAgICAg
cmVzdWx0VlJlZywKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgYmFzZUpT
UiwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzgsNyArMTI0Myw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2Vy
dChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIApAQCAtMTIwMiwyNCAr
MTI2NywyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHVzaW5nIG5h
bWVzcGFjZSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VKU1IpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBi
YXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGxvYWQ4RnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgp
ICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hHUFIpOwogICAg
ICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSksIHNj
cmF0Y2hHUFIpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNv
ZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlk
TW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGJhc2VHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRC
eUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGJhc2VK
U1IsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsK
ICAgICB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgYmFzZUpTUiwgcmVz
dWx0SlNSLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKICAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOwpAQCAtMTIz
Myw4ICsxMjk1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRKU1IpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmVzdWx0SlNSKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTI1MCwxMCAr
MTMxMiwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVj
b2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29u
c3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3Bl
cmF0aW9uLCAyPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBi
YXNlSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8U2xvd09wZXJhdGlvbj4oCisg
ICAgICAgIGJ5dGVjb2RlLAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICByZXN1bHRWUmVnLAor
ICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNlSlNSLAorICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTI2Myw3ICsxMzM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2wKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogCkBAIC0xMjg3LDE5ICsxMzU5LDE2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29k
ZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87Ci0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHVzaW5nIG5hbWVzcGFjZSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IGJhc2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzSlNSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUpTUiwgYmFzZVZSZWcpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCh0aGlzSlNSLCB0aGlzVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0
b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyh0aGlzR1BSKSwgc3R1YkluZm9HUFIpOworICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgcmVzdWx0SlNSLCBiYXNlSlNSLCB0aGlzSlNSLCBzdHViSW5mb0dQUik7
CiAKICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXRCeUlkV2l0aFRoaXM7CkBAIC0xMzEzLDEwICsxMzgyLDEyIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcsIHJlc3VsdEpTUik7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0m
IHZtKQogewpAQCAtMTM1NCw2ICsxNDI1LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG8KIH0K
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorI2VuZGlmCisKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTEzNjcsMTEgKzE0NDAsMjIgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7Ci0gICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4oYnl0
ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dP
cGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVm
ZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyB0aGlzSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4o
KTsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUpTUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgdGhpc0pTUik7
CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPFNsb3dPcGVyYXRpb24+KAorICAgICAgICBi
eXRlY29kZSwKKyAgICAgICAgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIHJlc3VsdFZSZWcsCisgICAgICAg
IGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIGJhc2VKU1IsIHRoaXNKU1IsCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzgxLDggKzE0NjUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhp
c1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc0pTUi5w
YXlsb2FkR1BSKCk7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhpc0dQUiA9PSBhcmd1bWVudEdQUjEpOwpAQCAt
MTM5OSw2ICsxNDgzLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKFZNJiB2bSkKIHsKQEAgLTE0MzgsNiArMTUyNCw4IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXNfcHJlcGFyZUNhCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
KyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CkBAIC0xNDUwLDE4ICsxNTM4LDE2IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGlu
dG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8v
IHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUg
ZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVH
UFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
c2NyYXRjaDsKKyAgICB1c2luZyBuYW1lc3BhY2UgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJl
ZywgdmFsdWVHUFIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUpTUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVZSZWcsIHZhbHVlSlNSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZVZSZWcpOwogCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVj
bWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgYmFzZUpTUiwgdmFsdWVKU1IsIHN0dWJJbmZvR1BS
LCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtp
bmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiAKICAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CkBAIC0xNDk2
LDExICsxNTgyLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgYXJndW1lbnRHUFIyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIzKTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9i
YWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxT
bG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiA9
IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAgY29uc3RleHBy
IEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9u
LCAzPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVK
U1IpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlSlNS
KTsKKyAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAgICAgICBBZGRyZXNzKHN0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAor
ICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCB2YWx1ZUpTUiwgYmFzZUpTUiwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1MTAsOCArMTYwNSw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2
YWx1ZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwpAQCAtMTU3MSwxNiArMTY2NiwxNCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICB1c2luZyBuYW1lc3BhY2UgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VKU1IpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlSlNSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAog
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUik7CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBiYXNl
SlNSLCByZXN1bHRKU1IsIHN0dWJJbmZvR1BSKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlJZDsKQEAgLTE1OTMsNyArMTY4Niw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmVzdWx0
SlNSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0xNjA5LDEwICsxNzAyLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIyKTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
KT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
dXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0
aW9uLCAyPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNl
SlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAgICAgICBBZGRyZXNz
KHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LAorICAgICAgICByZXN1bHRWUmVnLAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZv
R1BSLCBiYXNlSlNSLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYyMiw3ICsxNzI0
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG8KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIApAQCAt
MTY0NywxOSArMTc0OSwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgdXNpbmcgbmFtZXNwYWNlIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUpTUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUpTUiwgc2NyYXRjaEdQUik7CiAKICAgICBK
SVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKyAg
ICAgICAgYmFzZUpTUiwgcHJvcGVydHlKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIpOwogCiAg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZh
bDsKQEAgLTE2NzIsNyArMTc3MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0SlNSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTY4NywxMiArMTc4NiwyMiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7Ci0gICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVu
dEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjMpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSwgdmlhYmxlQXJndW1lbnRHUFI0KTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJh
dGlvbkluQnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0KTsK
KyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGlt
aXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFy
Z3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09w
ZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiA9IHByZWZl
cnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIHByb3BlcnR5SlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwg
ND4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZh
bDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5SlNSKTsKKyAg
ICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAg
ICBkc3QsCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIHByb2ZpbGVHUFIs
IGJhc2VKU1IsIHByb3BlcnR5SlNSKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTE3MDMsOCArMTgxMiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpi
YXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCk7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE3MjUs
MTggKzE4MzQsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIAogdm9pZCBKSVQ6OmVtaXRI
YXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgdXNpbmcgbmFtZXNw
YWNlIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9y
QnJhbmQsIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcHJvcGVydHlKU1Ip
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlKTsKIAogICAg
IEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworICAgICAgICBiYXNlSlNS
LCBwcm9wZXJ0eUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUik7CiAKICAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOwpAQCAtMTc0OSw3ICsxODU1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlLCBWaXJ0dWFsUmVnaXMKICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEpT
Uik7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNz
VHlwZSB0eXBlKQpAQCAtMTc2MiwxMSArMTg2OCwyMCBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZh
dGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFs
UgogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7Ci0gICAg
Y2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKT4o
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
YXJndW1lbnRHUFIzKTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0
aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93
T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSID0gcHJl
ZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MgcHJvcGVydHlKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9u
LCAzPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpTUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlKU1IpOworICAgIGNhbGxPcGVy
YXRpb248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGRzdCwKKyAg
ICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgYmFzZUpTUiwgcHJvcGVydHlKU1Ip
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTc3Niw4ICsxODkxLDggQEAg
dm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSwgVmlydHVhbFIKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2VK
U1IucGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCk7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwog
CkBAIC0xODIxLDYgKzE5MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVf
YnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIGVtaXRI
YXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5t
X2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCisjaWYgVVNFKEpTVkFM
VUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVu
c2lnbmVkIGRlcHRoKQogewogICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgcmVnVDApOwpAQCAtMjg5Myw4ICszMDEwLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogfQogCi10ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9l
bnVtZXJhdG9yKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1l
cmF0b3I+KCk7CkBAIC0zMDA0LDEwICszMTE5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
CiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVu
dW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHRKU1IucGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBheWxvYWRH
UFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJh
dG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7
CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5
VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0g
QmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwpAQCAtMzA1Niw3
ICszMTcxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBz
Y3JhdGNoMSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyB7IGJhc2VHUFIgfSwgc2NyYXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAppbmRleCA5MWZhYTRlNTJmZmIxMmEzZjZiNTJlN2I5M2E1NTBkYWNlMmY0Y2Q4
Li5jNjBiNjMyZTk0ZDFkZWYyZjQyMzBmMGE4NGJlODM2Y2ZkNzM1MmExIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAg
LTExOCw3NzIgKzExOCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotCi0gICAgZW1pdExvYWQoYmFzZSwgYmFzZVJlZ3Mu
dGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKLSAgICBKSVREZWxCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBiYXNlUmVncywgcmVzdWx0
UmVncywgSW52YWxpZEdQUlJlZywgcmVnVDQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZGVsQnlJ
ZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCByZXN1bHRSZWdzKTsKLQot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKLQotICAgIC8vIElD
IGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2Ug
aXMgY2VsbC4KLSAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQg
b2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCi0gICAg
Ly8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVj
dGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hv
dWxkRmlsdGVyQmFzZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwotCi0gICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7Ci0KLSAgICBlbWl0TG9hZDIoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VS
ZWdzLnBheWxvYWRHUFIoKSwgcHJvcGVydHksIHByb3BlcnR5UmVncy50YWdHUFIoKSwgcHJvcGVy
dHlSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChwcm9wZXJ0eSwgcHJvcGVydHlSZWdzLnRhZ0dQUigpKTsKLQotICAgIEpJVERlbEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIHJl
Z1Q0KTsKLQotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwotCi0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwotCi0gICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFy
cmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMg
cmVnaXN0ZXJzLgotICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KLSAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUg
c2l6ZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5
Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKLQotICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5VmFsc1ttX2RlbEJ5
VmFsSW5kZXgrK107Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAg
IEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBK
U1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotCi0g
ICAgZW1pdExvYWQyKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BS
KCksIHByb3BlcnR5LCBwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXlsb2Fk
R1BSKCkpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBi
YXNlUmVncy5wYXlsb2FkR1BSKCkpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCks
IHByb3BlcnR5UmVncy5wYXlsb2FkR1BSKCkpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLQotICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
ZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLQotICAgIGVtaXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVn
cy5wYXlsb2FkR1BSKCkpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotCi0gICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCBy
ZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0KLSAgICBpZiAoYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlv
bnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBu
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCByZWdUMCwgcmVnVDQpOwotICAgICAgICBub3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwg
b3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgcmVnVDAsIHJlZ1Q0KTsKLQotICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLQotICAgICAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVnczo6cGF5
bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCByZXN1bHRSZWdzLCBJ
bnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5
KSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwot
ICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwot
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwot
ICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotICAgIH0KLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBp
ZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIEpJVEdldEJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICAr
K21fZ2V0QnlWYWxJbmRleDsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZh
dGVOYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8gYmFzZUdQUiA9
IEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCk7Ci0gICAgYXV0byBwcm9wZXJ0eUdQUiA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0KLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEs
IHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLQotICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgcmVzdWx0UmVncywg
SW52YWxpZEdQUlJlZyk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdl
bik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
LSAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxv
YWRHUFIoKSk7Ci19Ci0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIp
KTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZh
dGVOYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLQot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICArK21fZ2V0QnlWYWxJbmRl
eDsKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIGF1dG8gYmFzZUdQ
UiA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgYXV0byBwcm9wZXJ0eUdQUiA9IEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5h
bWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0gICAgZW1pdExvYWQyKGJh
c2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0gICAgZW1pdExvYWQo
dmFsdWUsIHJlZ1Q1LCByZWdUNCk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZSwgcmVnVDEpOwotCi0gICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRH
UFJSZWcpOwotICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKLQotICAgIC8vIElDIGNh
biB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMg
Y2VsbC4KLSAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFz
ZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmll
cihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwotICAgIFByaXZh
dGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKLQotICAgIEpJVFB1
dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107Ci0K
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7Ci0KLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdz
IHZhbHVlUmVncyhyZWdUNSwgcmVnVDQpOwotCi0gICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5k
LmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVn
cywgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwotCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNl
dFByaXZhdGVCcmFuZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAg
IEpTVmFsdWVSZWdzIGJhc2VSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgYnJh
bmRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgZW1pdExvYWQoYmFzZSwgYmFzZVJlZ3MudGFnR1BS
KCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgZW1pdExvYWQoYnJhbmQsIGJyYW5kUmVn
cy50YWdHUFIoKSwgYnJhbmRSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwotCi0gICAgSklUUHJpdmF0
ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgYmFzZVJlZ3Ms
IGJyYW5kUmVncywgSW52YWxpZEdQUlJlZyk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9wcml2YXRl
QnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKLQotICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRl
LWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2Ji
ZXJzIHJlZ2lzdGVycy4KLSAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0
IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCi0gICAgLy8gRklYTUU6IFVzZSBVbmNv
bmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBj
b2RlIHNpemUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgSlNW
YWx1ZVJlZ3MgYmFzZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBicmFuZFJl
Z3MocmVnVDMsIHJlZ1QyKTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBK
SVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNz
ZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07Ci0gICAgKyttX3ByaXZhdGVCcmFuZEFjY2Vz
c0luZGV4OwotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0
ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tQcml2YXRlQnJhbmQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKLSAgICBKU1ZhbHVlUmVncyBi
YXNlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIGJyYW5kUmVncyhyZWdUMywg
cmVnVDIpOwotICAgIGVtaXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5w
YXlsb2FkR1BSKCkpOwotICAgIGVtaXRMb2FkKGJyYW5kLCBicmFuZFJlZ3MudGFnR1BSKCksIGJy
YW5kUmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKLQotICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgYmFzZVJlZ3MsIGJyYW5kUmVncywg
SW52YWxpZEdQUlJlZyk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nl
cy5hcHBlbmQoZ2VuKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVf
YnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotewotICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAg
SlNWYWx1ZVJlZ3MgYnJhbmRSZWdzKHJlZ1QzLCByZWdUMik7Ci0KLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBt
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXhdOwotICAgICsr
bV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7Ci0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbERpcmVjdD4oY3Vy
cmVudEluc3RydWN0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0gICAgZW1pdExvYWQyKGJhc2UsIHJlZ1Qx
LCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0gICAgZW1pdExvYWQodmFsdWUsIHJl
Z1Q1LCByZWdUNCk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVn
VDEpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgcmVnVDAs
IHJlZ1Q2KTsKLSAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcmVnVDYpOwotCi0gICAgSklUUHV0
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCks
IHJlZ1Q2LCBJbnZhbGlkR1BSUmVnKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX3B1dEJ5VmFscy5h
cHBlbmQoZ2VuKTsKLQotICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KLSAgICAvLyBGSVhNRTogVXNlIFVuY29u
ZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNv
ZGUgc2l6ZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA5Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOwotICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7Ci0gICAg
RUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gbnVsbHB0cjsKLQotICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2Rl
KSB7Ci0gICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgICAgIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgICAgICBlY21hTW9kZSA9IEpJVDo6ZWNtYU1vZGUoYnl0ZWNvZGUpOwotICAgICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAg
ICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIH07Ci0KLSAgICBp
ZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
VmFsRGlyZWN0PigpKTsKLSAgICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5VmFsPigpKTsKLQotICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107Ci0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICAvLyBUaGUg
cmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dh
cHBpbmcgb24gQVJNLgotICAgIC8vIFN3YXBwaW5nIHNob3VsZG4ndCBoYXBwZW4gb24gb3RoZXIg
cGxhdGZvcm1zLgotICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMiwgcmVnVDEsIHByb3BlcnR5LCBy
ZWdUMywgcmVnVDApOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOwotCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7Ci0K
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVn
VDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0KLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLQot
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFj
Y2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0
UmVncy5wYXlsb2FkR1BSKCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5
SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotCi0gICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0K
LSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0
UmVncy5wYXlsb2FkR1BSKCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotCi0gICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5m
bygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOwotCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKLX0KLQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLSAgICAKLSAgICBlbWl0TG9h
ZChiYXNlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlLCByZWdUMSk7Ci0KLSAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxl
bmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgbG9hZDhGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkg
KyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgcmVnVDIpOwotICAgICAgICBK
dW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSksIHJlZ1QyKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5
SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0
YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCByZWdUMCwgcmVnVDIpOwotICAg
ICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKLSAgICB9Ci0KLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5
bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1p
dFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKLQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0g
ICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLSAgICAKLSAgICBlbWl0TG9hZChiYXNlLCByZWdU
MSwgcmVnVDApOwotICAgIGVtaXRMb2FkKHRoaXNWUmVnLCByZWdUNCwgcmVnVDMpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHRoaXNWUmVnLCByZWdUNCk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLQotICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNW
YWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwg
SW52YWxpZEdQUlJlZyk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFw
cGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIEpJVEdldEJ5SWRX
aXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhU
aGlzSW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0g
ICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIC8vIEluIG9yZGVy
IHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBv
ZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFy
Z3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBh
bmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zm
c2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotICAgIAotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNv
ZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLSAg
ICAKLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1Qy
KTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwot
Ci0gICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSwgSW52YWxpZEdQUlJlZywKLSAgICAgICAgcmVnVDEsIGJ5dGVjb2RlLm1fZmxhZ3Mu
ZWNtYU1vZGUoKSwgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0
KTsKLSAgICAKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwotICAg
IAotICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmll
ciBpZiBhIGJhc2UgaXMgY2VsbC4KLSAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0
ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KLSAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0gICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29s
ZFBhdGhCZWdpbih0aGlzKTsKLQotICAgIC8vIEpJVFB1dEJ5SWRHZW5lcmF0b3Igb25seSBwcmVz
ZXJ2ZSB0aGUgdmFsdWUgYW5kIHRoZSBiYXNlJ3MgcGF5bG9hZCwgd2UgaGF2ZSB0byByZWxvYWQg
dGhlIHRhZy4KLSAgICBlbWl0TG9hZFRhZyhiYXNlLCByZWdUMSk7Ci0KLSAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwotICAgIAotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9u
KCksIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
cHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7Ci0KLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0KLSAgICBKSVRJbkJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
cHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKLQotICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRz
W21faW5CeUlkSW5kZXgrK107Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
LQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1
YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKLQotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKLQotICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdU
MywgcmVnVDIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCByZWdUMCwgcmVn
VDQpOwotCi0gICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRD
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJl
Z1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgSklUSW5CeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKLQotICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLQotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQotewotICAg
IGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5T3JCcmFuZCwgcmVnVDMsIHJl
Z1QyKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotCi0g
ICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJ
bnZhbGlkR1BSUmVnKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4p
OwotCi0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlIHR5cGUpCi17Ci0gICAgLy8g
RklYTUU6IDY0LWJpdCBzZWVtcyB0byBhbHNvIGlnbm9yZSBiYXNlL3Byb3BlcnR5LgotICAgIEFT
U0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKLSAgICBVTlVTRURfUEFSQU0oYmFzZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHByb3BlcnR5KTsKLQotICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
aW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107Ci0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3Bl
cmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLQotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2hhc19wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlKGJ5dGVjb2RlLm1fZHN0LCBieXRl
Y29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fcHJvcGVydHksIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsK
LSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwg
Ynl0ZWNvZGUubV9wcm9wZXJ0eSwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5kPigpOwotICAgIGVtaXRIYXNQcml2YXRlKGJ5dGVjb2Rl
Lm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVCcmFuZCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9i
cmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZh
dGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVj
b2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9icmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5k
KTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVu
c2lnbmVkIGRlcHRoKQogewogICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgcmVnVDApOwpAQCAtMTM3Myw4ICs2MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiB9CiAKLXRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4o
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2Vu
dW1lcmF0b3IoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsK
</data>
<flag name="commit-queue"
          id="466440"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442042</attachid>
            <date>2021-10-21 09:26:31 -0700</date>
            <delta_ts>2021-10-22 02:32:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232079-20211021172629.patch</filename>
            <type>text/plain</type>
            <size>228575</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NjA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NWVlMmU1ZDFiYmY1MDA5OWY5YzkwMGFiZGU4NTRlYWJmNjIxNGFhLi5lYzEzNjEzNWRhYzM0YmI3
M2M0NTZmOTA4N2UzZDQxODM4YzQ5NjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjYgQEAKKzIwMjEtMTAtMjEgIEdlemEgTG9yZSAgPGdlemFsb3JlQGdtYWlsLmNvbT4K
KworICAgICAgICBbSlNDXVszMmJpdF0gVXNlIERhdGFJQyBpbiBCYXNlbGluZSBKSVQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjA3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcG9y
dHMgdGhlIEpTVkFMVUUzMl82NCBiYXNlbGluZSBKSVQgdG8gdXNlIERhdGFJQ3MuCisKKyAgICAg
ICAgVGhlIG1ham9yaXR5IG9mIHRoZSBpbnZvbHZlZCBvcGNvZGVzIChhbGwgYnV0IG9uZSkgY291
bGQgYmUgZWFzaWx5CisgICAgICAgIG1vZGlmaWVkIHRvIHVzZSBhIGNvbW1vbiBpbXBsZW1lbnRh
dGlvbiBiZXR3ZWVuIEpTVkFMVUU2NCBhbmQKKyAgICAgICAgSlNWQUxVRTMyXzY0IHBsYXRmb3Jt
cyBieSBhYnN0cmFjdGluZyBvdmVyIG1hY2hpbmUgcmVnaXN0ZXJzIGhvbGRpbmcgYQorICAgICAg
ICBKU1ZhbHVlIHVzaW5nIEpTVmFsdWVSZWcgdHlwZXMgaW5zdGVhZCBvZiBHUFJSZWcuCisKKyAg
ICAgICAgVGhlIG9ubHkgbm9uLXRyaXZpYWwgYWRkaXRpb25hbCBhYnN0cmFjdGlvbiBuZWVkZWQg
d2FzIG92ZXIgdGhlIGlkZWFsCisgICAgICAgIGFyZ3VtZW50IHJlZ2lzdGVycyB1c2VkIGluIGEg
ZnVuY3Rpb24gY2FsbCwgc28gbG9hZGluZyB0aGUgYXJndW1lbnRzCisgICAgICAgIGZyb20gbWVt
b3J5IGNhbiBwdXQgdGhlbSBzdHJhaWdodCBpbiB0aGUgQUJJIHNwZWNpZmljIGFyZ3VtZW50Cisg
ICAgICAgIHJlZ2lzdGVyIHdoZW5ldmVyIHBvc3NpYmxlLCBvciBhcHByb3ByaWF0ZSB0ZW1wb3Jh
cmllcyBvdGhlcndpc2UuIEZvcgorICAgICAgICB0aGlzIEkgYWRkZWQgQ0NhbGxIZWxwZXJzOjpw
cmVmZXJyZWRBcmd1bWVudEdQUiAoZm9yIHBhc3NpbmcgaG9zdAorICAgICAgICBwb2ludGVycyBh
bmQgb3RoZXIgcHJpbWl0aXZlIHR5cGVzIHRoYXQgZml0IGluIGEgbWFjaGluZSByZWdpc3RlciBv
bgorICAgICAgICB0aGUgaG9zdCBwbGF0Zm9ybSksIGFuZCBDQ2FsbEhlbHBlcnM6OnByZWZlcnJl
ZEFyZ3VtZW50SlNSIChmb3IKKyAgICAgICAgcGFzc2luZyBKU1ZhbHVlL0VuY29kZWRKU1ZhbHVl
KS4gUGxlYXNlIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlc2UKKyAgICAgICAgaW4gdGhlIGNv
ZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2Vt
Ymxlci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6c3RyYik6CisgICAgICAgICog
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpl
bWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlD
RmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90T2JqZWN0KToKKyAgICAgICAgKiBq
aXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6c2l6ZU9mQXJn
KToKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjpwaWNrSlNSKToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpwcmVmZXJyZWRBcmd1bWVudEpTUik6CisgICAgICAgIChKU0M6OkNDYWxs
SGVscGVyczo6cHJlZmVycmVkQXJndW1lbnRHUFIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVT
aHVmZmxlci5oOgorICAgICAgICAqIGppdC9HUFJJbmZvLmg6CisgICAgICAgIChKU0M6OkpTVmFs
dWVSZWdzOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVJlZ3M6Om9w
ZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUmVnczo6dGFnR1BSIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVJlZ3M6OnBheWxvYWRHUFIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpKU1ZhbHVlUmVnczo6dXNlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWVS
ZWdzOjpvdmVybGFwcyBjb25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWVSZWdzOjpKU1ZhbHVl
UmVncyk6CisgICAgICAgIChKU0M6OkpTVmFsdWVSZWdzOjpwYXlsb2FkT25seSk6CisgICAgICAg
ICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluZyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJ
VC5oOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
b3Blbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMy
XzY0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlND
OjpKSVRDb2RlOjp1c2VEYXRhSUMpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlR2V0QnlJZElubGluZUFjY2Vzcyk6Cisg
ICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6
SklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAgICAqIGppdC9KSVRJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwpOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVj
a19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19w
cml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNs
b3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9kZWxfYnlf
aWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlf
Z2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRIYXNQcml2YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZVNsb3cpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAg
ICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisKIDIwMjEtMTAtMjAgIFl1c3Vr
ZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICAqSXNTYW5lIEFQSSdzIGNv
dWxkIHRha2UgaW4gdGhlIFN0cnVjdHVyZSdzIHdlJ3JlIGNvbnN1bHRpbmcsIG9yIHRoZXkgY2Fu
IGJlIG91dCBwYXJhbWV0ZXJzLCBzbyB3ZSBkb24ndCByZWx5IG9uIHRoZSBDUFUncyBtZW1vcnkg
b3JkZXJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2RmM2E2MTg2ZjYzZjgz
NDQyZGYxN2NlMjkzNDIwNDI4OTNmMmJkZi4uZWM1NmMxMGVhYTBlNGYwNmEyZTMwZTNhYWI2NDZh
MGYwZGJiNjhjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM0NDYsNyArMzQ0
Niw2IEBACiAJCTE0NkFBQjM3MEI2NkE5NDQwMEU1NUYxNiAvKiBKU1N0cmluZ1JlZkNGLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ1JlZkNGLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ2QjE0REIxMkVCNUIxMjAwMUJFQzFCIC8q
IENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbnNlcnZhdGl2ZVJvb3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQ2RkE1QTgxMzc4RjZCMDAwMzYyN0EzIC8qIEhhbmRsZVR5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhhbmRsZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTE0NkZFNTExMTFBNzEwNDMwMDg3QUU2NiAvKiBKSVRDYWxsMzJfNjQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQ2FsbDMyXzY0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3MTQ4MkUyMEQzMjM2NDAwOTBFNjMwIC8qIEpTV3Jh
cHBlck1hcFRlc3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV3JhcHBl
ck1hcFRlc3RzLmg7IHBhdGggPSBBUEkvdGVzdHMvSlNXcmFwcGVyTWFwVGVzdHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3MTQ4MkYyMEQzMjM2NTAwOTBFNjMwIC8qIEpTV3Jh
cHBlck1hcFRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
SlNXcmFwcGVyTWFwVGVzdHMubW07IHBhdGggPSBBUEkvdGVzdHMvSlNXcmFwcGVyTWFwVGVzdHMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NzM0MUNCMURDMDJENzIwMEFBMjlC
QSAvKiBFeGVjdXRhYmxlQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
eGVjdXRhYmxlQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM2NSw3ICs2
MzY0LDYgQEAKIAkJCQlGRTNBMDZBRjFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0WG9yR2VuZXJh
dG9yLmNwcCAqLywKIAkJCQlGRTNBMDZCMDFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0WG9yR2Vu
ZXJhdG9yLmggKi8sCiAJCQkJODZDQzg1QTIwRUU3OUI3NDAwMjg4NjgyIC8qIEpJVENhbGwuY3Bw
ICovLAotCQkJCTE0NkZFNTExMTFBNzEwNDMwMDg3QUU2NiAvKiBKSVRDYWxsMzJfNjQuY3BwICov
LAogCQkJCTBGOEY5NDQzMTY2NzYzNTIwMEQ2MTk3MSAvKiBKSVRDb2RlLmNwcCAqLywKIAkJCQk4
NkNDRUZERDBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5oICovLAogCQkJCTBGRkI4MEJCMjBB
Nzk0NzAwMDA2QUFGNiAvKiBKSVRDb2RlSW5saW5lcy5oICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IGUwZTIzYTJmMzZjMTI1ZTk2N2YwZWZhNWM0ZDliOThkYTg4Y2VjMTMuLmRk
OGNiNjI3MjQxYmU4OGNlZWYwNzQ1OWM4NWVmM2M4YTlmOGM4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQKQEAgLTY0Miw3ICs2NDIsNiBAQCBqaXQvSklUQml0QW5kR2VuZXJhdG9yLmNw
cAogaml0L0pJVEJpdE9yR2VuZXJhdG9yLmNwcAogaml0L0pJVEJpdFhvckdlbmVyYXRvci5jcHAK
IGppdC9KSVRDYWxsLmNwcAotaml0L0pJVENhbGwzMl82NC5jcHAKIGppdC9KSVRDb2RlLmNwcAog
aml0L0pJVENvbXBpbGF0aW9uLmNwcAogaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCmluZGV4IDFj
OGNkMGNlNGZkODIxYThiODkzNDVlNDc5ZGJjZDlmNTMxNDRiNzkuLmIxMjY1Mzg1YTVkNzM5Njdl
ZDVlOTA5NDgyMjA5ZWRkYjRmNDI0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKQEAgLTE1NjUsOCArMTU2NSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKHJuICE9IEFSTVJlZ2lzdGVyczo6cGMpOwogICAgICAgICBBU1NFUlQo
aW1tLmlzVUludDEyKCkpOwogCi0gICAgICAgIGlmICghKChydCB8IHJuKSAmIDgpICYmIGltbS5p
c1VJbnQ3KCkpCi0gICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A1SW1tNVJlZzNSZWcz
KE9QX1NUUkJfaW1tX1QxLCBpbW0uZ2V0VUludDcoKSA+PiAyLCBybiwgcnQpOworICAgICAgICBp
ZiAoISgocnQgfCBybikgJiA4KSAmJiBpbW0uaXNVSW50NSgpKQorICAgICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lV29yZE9wNUltbTVSZWczUmVnMyhPUF9TVFJCX2ltbV9UMSwgaW1tLmdldFVJbnQ1
KCksIHJuLCBydCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dv
cmRPcDEyUmVnNFJlZzRJbW0xMihPUF9TVFJCX2ltbV9UMiwgcm4sIHJ0LCBpbW0uZ2V0VUludDEy
KCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAKaW5kZXggNjYzYmY5OTlmZDQ3ZjhmMzEzZTA0NjNkNmJkYzZlY2VmNGY4MDk1NC4u
MDYzY2E4MmRkNWI5ZWQ2OWIyYjkwYjQ0MzQzYzU3OGMyNDE3YjcwMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKQEAgLTMwNCw4ICszMDQs
MTEgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRo
SW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW4KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOwogCiAgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VEYXRhSUM6OlllcykgeworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzY3JhdGNoIHJlZ2lzdGVyIGlzIG5vdCBnZW5lcmFsbHkgc2Fm
ZSB0byB1c2Ugb24gQVJNdjcsIGFzIHRoZSBtYWNybworICAgICAgICAvLyAgICAgICAgYXNzZW1i
bGVyIGFsd2F5cyBhc3N1bWVzIGl0IGlzIGF2YWlsYWJsZS4gQXQgdGhlIG1vbWVudCwgaXQgZG9l
cyBoYXBwZW4gdG8gd29yaworICAgICAgICAvLyAgICAgICAgd2l0aCB0aGUgY29kZSBiZWxvdy4K
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7Ci0gICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNh
bGxvd1NjcmF0Y2goaml0KTsKQEAgLTM2NSw5ICszNjgsNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCwgRwogTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZh
bGlkR1BSUmVnKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIFVzZXMgRGF0YUlDCi0jZW5kaWYKICAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUM6OlllcywgZmFsc2UsIG51bGxwdHIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAppbmRleCA2YWI0Y2ViNGI2YTUw
NGM0ODI2NGQ1MmQxZDE1ODFiZTZhNTkwYTMwLi5mZDM0YmVjY2ZmMmIwZThiNjQ2ZGNjNzBlNGMy
YzM4OGRlNTQ1Y2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKQEAgLTQzNCw3ICs0MzQsNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNldENhY2hlVHlwZShjb25zdCBDb25jdXJyZW50SlNM
b2NrZXJCYXNlJgogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byYgdW5saW5rZWRTdHViSW5mbykKIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGFjY2Vzc1R5
cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CiAgICAgc3RhcnQgPSB1bmxpbmtlZFN0
dWJJbmZvLnN0YXJ0OwogICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxv
Y2F0aW9uOwpAQCAtNDQ1LDggKzQ0NCw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRp
YWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpCiAKICAg
ICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
OwogICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRT
dHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgewotICAgICAgICAvLyBGb3IgaXRl
cmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJl
Z2lzdGVyIGVpdGhlci4KLSAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9y
X25leHQsIHdlIGNhbid0IGNsb2JiZXIgdGhlICJkb250Q2xvYmJlckpTUiIgcmVnaXN0ZXIgZWl0
aGVyLgorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmRvbnRDbG9iYmVySlNSKTsKICAgICB9CiAKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKQEAg
LTQ4MCwxMyArNDc5LDEzIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9t
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpCiAgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CiAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVOYW1lOgogICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFt
ZU9wdGltaXplOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVCcmFuZDogCiAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVC
cmFuZE9wdGltaXplOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFBy
aXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgogICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CkBAIC01NDMsOTYgKzU0
MiwxNTIgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGkKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUp
IHsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgogICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSBmYWxzZTsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxS
ZWdpc3RlcnM6OmJhc2U7Ci0gICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURl
bEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAgICAgICByZWdzLnByb3Bl
cnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHlKU1IucGF5bG9hZEdQ
UigpOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dEpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAg
ICBiYXNlVGFnR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUi50YWdHUFIo
KTsKKyAgICAgICAgdi5wcm9wZXJ0eVRhZ0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5SlNSLnRhZ0dQUigpOworICAgICAgICB2YWx1ZVRhZ0dQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdEpTUi50YWdHUFIoKTsKKyNlbmRpZgogICAgICAgICBicmVh
azsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CiAgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IHRydWU7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6
OmJhc2VKU1IucGF5bG9hZEdQUigpOwogICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxp
ZEdQUlJlZzsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHRKU1IucGF5bG9hZEdQUigpOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
ICAgICBiYXNlVGFnR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQ
UigpOworICAgICAgICB2LnByb3BlcnR5VGFnR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
dmFsdWVUYWdHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUi50YWdHUFIo
KTsKKyNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
OgogICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CiAgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IGZhbHNlOwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKLSAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHJlZ3MucHJv
cGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2Fk
R1BSKCk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0SlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
ICAgIGJhc2VUYWdHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQ
UigpOworICAgICAgICB2LnByb3BlcnR5VGFnR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHlKU1IudGFnR1BSKCk7CisgICAgICAgIHZhbHVlVGFnR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0SlNSLnRhZ0dQUigpOworI2VuZGlmCiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKICAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gZmFsc2U7CiAgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBm
YWxzZTsKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKICAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOwogICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZh
bHVlSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnJlc3VsdEdQUjsKKyAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm9HUFI7
CisgICAgICAgIGJhc2VUYWdHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2YWx1ZVRhZ0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHYucHJvcGVydHlUYWdHUFIgPSBJbnZhbGlkR1BS
UmVnOworI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZh
bDoKICAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKICAgICBjYXNlIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCiAgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IGZhbHNlOwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OwotICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJl
c3VsdDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJh
c2VKU1IucGF5bG9hZEdQUigpOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHRKU1IucGF5bG9hZEdQUigpOwor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
b0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBiYXNlVGFnR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQUigpOworICAgICAgICB2LnByb3BlcnR5
VGFnR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi50YWdHUFIoKTsK
KyAgICAgICAgdmFsdWVUYWdHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdEpT
Ui50YWdHUFIoKTsKKyNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlJZDoKICAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKICAgICAgICAg
cmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxp
bmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAgICAgdi50aGlzVGFnR1BSID0gSW52YWxpZEdQUlJlZzsKKyAg
ICAgICAgYmFzZVRhZ0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQ
UigpOworICAgICAgICB2YWx1ZVRhZ0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1
bHRKU1IudGFnR1BSKCk7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NU
eXBlOjpUcnlHZXRCeUlkOgogICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKICAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CiAgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IHRydWU7CiAgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAg
ICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUi5wYXls
b2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHYudGhpc1Rh
Z0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VUYWdHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2VKU1IudGFnR1BSKCk7CisgICAgICAgIHZhbHVlVGFnR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHRKU1IudGFnR1BSKCk7CisjZW5kaWYKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CiAgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OwotICAgICAgICByZWdzLnRoaXNH
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwotICAgICAg
ICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHRKU1IucGF5bG9hZEdQUigpOworICAgICAgICByZWdz
LnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc0pTUi5wYXls
b2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAg
YmFzZVRhZ0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlSlNSLnRh
Z0dQUigpOworICAgICAgICB2YWx1ZVRhZ0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVn
aXN0ZXJzOjpyZXN1bHRKU1IudGFnR1BSKCk7CisgICAgICAgIHYudGhpc1RhZ0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzSlNSLnRhZ0dQUigpOworI2VuZGlmCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKICAgICAgICAgaGFz
Q29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKICAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxp
ZEdQUlJlZzsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOwot
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZUpTUi5w
YXlsb2FkR1BSKCk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
Ojp2YWx1ZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgICAgIHYudGhpc1RhZ0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VUYWdHUFIg
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IudGFnR1BSKCk7CisgICAgICAgIHZh
bHVlVGFnR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZUpTUi50YWdHUFIoKTsK
KyNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgog
ICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CiAgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IGZhbHNlOwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKLSAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnZhbHVlOwotICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgcmVncy5wcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBheWxvYWRHUFIo
KTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZUpT
Ui5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKICAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNz
VHlwZTo6UHV0QnlWYWwpCi0gICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGVHUFI7CisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgYmFzZVRhZ0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OmJhc2VKU1IudGFnR1BSKCk7CisgICAgICAgIHYucHJvcGVydHlUYWdHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi50YWdHUFIoKTsKKyAgICAgICAgdmFsdWVUYWdH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZUpTUi50YWdHUFIoKTsKKyNlbmRp
ZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoK
ICAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgogICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSBmYWxzZTsKICAgICAgICAgdmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVn
OwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7
Ci0gICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YnJhbmQ7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmRKU1IucGF5bG9hZEdQUigpOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJ
bmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHZhbHVlVGFnR1BSID0gSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZVRhZ0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpiYXNlSlNSLnRhZ0dQUigpOworICAgICAgICB2LmJyYW5kVGFnR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kSlNSLnRhZ0dQUigpOworI2VuZGlmCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHVubGlua2VkU3R1Yklu
Zm8pOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCiB9CiAKICNpZiBBU1NFUlRf
RU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5k
ZXggMjQ0ZjIyMjc5MmM3MGY4MWFkMDc3MTA3YTE2NjMzMmRjNzMxZWYwZi4uZGMwNGVmOTEwOTEw
MGFmMTNlMTY1ZDU2NjhmYzZlMGY3Mzk0ZTQxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC05MDQsNiArOTA0LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIEJlbG93LCBBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNo
SWZOb3RPYmplY3QoSlNWYWx1ZVJlZ3MgY2VsbEpTUikKKyAgICB7CisgICAgICAgIHJldHVybiBi
cmFuY2hJZk5vdE9iamVjdChjZWxsSlNSLnBheWxvYWRHUFIoKSk7CisgICAgfQorCiAgICAgLy8g
Tm90ZSB0aGF0IGZpcnN0IGFuZCBsYXN0IGFyZSBpbmNsdXNpdmUuCiAgICAgSnVtcCBicmFuY2hJ
ZlR5cGUoR1BSUmVnIGNlbGxHUFIsIEpTVHlwZVJhbmdlIHJhbmdlKQogICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCmluZGV4IDRiZDZlNmM4ODZmNTNkYWRhNjc2
Nzk2MDFiNjAwN2E5ZjE5MWNlMDYuLjljYjgyYzdlMTFhOGU4MDdlY2Q4ZDZjMWRkZDYzMTExMGEz
NjFjZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaApAQCAtODUy
LDYgKzg1MiwxNDYgQEAgcHVibGljOgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tl
dChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BS
UmVnIHNjcmF0Y2gyKTsKIAogICAgIHN0YXRpYyB2b2lkIGVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUsIFNjb3BlZExhbWJkYTx2b2lk
KENDYWxsSGVscGVycyYpPiwgY29uc3QgY2hhciopOworCitwcml2YXRlOgorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBBcmdOdW0+CisgICAgc3RhdGljIGNv
bnN0ZXhwciBzdGQ6OmVuYWJsZV9pZl90PChGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6
YXJpdHkgPiBBcmdOdW0pLCBzaXplX3Q+IHNpemVPZkFyZygpCisgICAgeworICAgICAgICByZXR1
cm4gc2l6ZW9mKHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+Ojp0ZW1wbGF0
ZSBBcmd1bWVudFR5cGU8QXJnTnVtPik7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgQXJnTnVtLCB1bnNp
Z25lZCBJbmRleCA9IEFyZ051bSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHBpY2tKU1IoR1BSUmVnIGZpcnN0LCBBcmdzLi4uIHJlc3QpCisgICAg
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVPZkFyZzxPcGVyYXRpb25UeXBlLCBBcmdOdW0g
LSBJbmRleD4oKSA8PSA4LCAiRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGxhcmdlIGFyZ3VtZW50
cyIpOworICAgICAgICBpZiBjb25zdGV4cHIgKCFJbmRleCkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlUmVncyB7IGZpcnN0IH07CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVU5VU0VE
X1BBUkFNKGZpcnN0KTsgLy8gT3RoZXJ3aXNlIHdhcm5pbmcgZHVlIHRvIGNvbnN0ZXhwcgorICAg
ICAgICAgICAgcmV0dXJuIHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJnTnVtLCBJbmRleCAtIDE+
KHJlc3QuLi4pOworICAgICAgICB9CisgICAgfQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgQXJnTnVtLCB1bnNp
Z25lZCBJbmRleCA9IEFyZ051bSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHBpY2tKU1IoR1BSUmVnIGZpcnN0LCBHUFJSZWcgc2Vjb25kLCBHUFJS
ZWcgdGhpcmQsIEFyZ3MuLi4gcmVzdCkKKyAgICB7CisgICAgICAgIGNvbnN0ZXhwciBzaXplX3Qg
c2l6ZU9mQ3VycmVudEFyZyA9IHNpemVPZkFyZzxPcGVyYXRpb25UeXBlLCBBcmdOdW0gLSBJbmRl
eD4oKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplT2ZDdXJyZW50QXJnIDw9IDgsICJEb24n
dCBrbm93IGhvdyB0byBoYW5kbGUgbGFyZ2UgYXJndW1lbnRzIik7CisgICAgICAgIGlmIGNvbnN0
ZXhwciAoIUluZGV4KSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHNpemVPZkN1cnJlbnRB
cmcgPD0gNCkgeworICAgICAgICAgICAgICAgIC8vIEZpdHMgaW4gc2luZ2xlIEdQUgorICAgICAg
ICAgICAgICAgIFVOVVNFRF9QQVJBTShzZWNvbmQpOyAvLyBPdGhlcndpc2Ugd2FybmluZyBkdWUg
dG8gY29uc3RleHByCisgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHRoaXJkKTsgLy8gT3Ro
ZXJ3aXNlIHdhcm5pbmcgZHVlIHRvIGNvbnN0ZXhwcgorICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoZmlyc3QpOworICAgICAgICAgICAgfSBlbHNlIGlmIChm
aXJzdCA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjEgJiYgc2Vjb25kID09IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiAmJiB0aGlyZCA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjMpIHsKKyAgICAgICAgICAg
ICAgICAvLyBXaWRlIGFyZ3VtZW50IHBhc3NlZCBpbiBHUFJzIG5lZWRzIHRvIHN0YXJ0IHdpdGgg
ZXZlbiByZWdpc3RlciBudW1iZXIsIHNvIHNraXAgYXJndW1lbnRHUFIxCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWVSZWdzIHsgdGhpcmQsIHNlY29uZCB9OworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBpcyBlaXRoZXIgYW4gZXZlbiByZWdpc3Rl
ciwgb3IgdGhpcyBhcmd1bWVudCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgc3RhY2ssIHNvIGl0IGRv
ZXMgbm90IG1hdHRlcgorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyB7IHNlY29u
ZCwgZmlyc3QgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmIGNvbnN0ZXhwcihzaXplT2ZDdXJyZW50QXJnIDw9IDQpIHsKKyAgICAgICAgICAgICAgICAv
LyBGaXRzIGluIHNpbmdsZSBHUFIKKyAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0oZmlyc3Qp
OyAvLyBPdGhlcndpc2Ugd2FybmluZyBkdWUgdG8gY29uc3RleHByCisgICAgICAgICAgICAgICAg
cmV0dXJuIHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJnTnVtLCBJbmRleCAtIDE+KHNlY29uZCwg
dGhpcmQsIHJlc3QuLi4pOworICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdCA9PSBHUFJJbmZv
Ojphcmd1bWVudEdQUjEgJiYgc2Vjb25kID09IEdQUkluZm86OmFyZ3VtZW50R1BSMiAmJiB0aGly
ZCA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjMpIHsKKyAgICAgICAgICAgICAgICAvLyBXaWRlIGFy
Z3VtZW50IHBhc3NlZCBpbiBHUFJzIG5lZWRzIHRvIHN0YXJ0IHdpdGggZXZlbiByZWdpc3RlciBu
dW1iZXIsIHNvIHNraXAgYXJndW1lbnRHUFIxLCBidXQgcmV1c2UgaXQgbGF0ZXIKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcGlja0pTUjxPcGVyYXRpb25UeXBlLCBBcmdOdW0sIEluZGV4IC0gMT4o
Zmlyc3QsIHJlc3QuLi4pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBGaXJzdCBpcyBlaXRoZXIgYW4gZXZlbiByZWdpc3Rlciwgb3IgdGhpcyBhcmd1bWVudCB3aWxs
IGJlIHB1c2hlZCB0byB0aGUgc3RhY2ssIHNvIGl0IGRvZXMgbm90IG1hdHRlcgorICAgICAgICAg
ICAgICAgIHJldHVybiBwaWNrSlNSPE9wZXJhdGlvblR5cGUsIEFyZ051bSwgSW5kZXggLSAxPih0
aGlyZCwgcmVzdC4uLik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgQXJnTnVtLCB1bnNpZ25l
ZCBJbmRleCA9IEFyZ051bSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3RleHBy
IEpTVmFsdWVSZWdzIHBpY2tKU1IoR1BSUmVnIGZpcnN0LCBHUFJSZWcgc2Vjb25kKQorICAgIHsK
KyAgICAgICAgY29uc3RleHByIHNpemVfdCBzaXplT2ZDdXJyZW50QXJnID0gc2l6ZU9mQXJnPE9w
ZXJhdGlvblR5cGUsIEFyZ051bSAtIEluZGV4PigpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVPZkN1cnJlbnRBcmcgPD0gOCwgIkRvbid0IGtub3cgaG93IHRvIGhhbmRsZSBsYXJnZSBhcmd1
bWVudHMiKTsKKyAgICAgICAgLy8gQmFzZSBjYXNlLCAnZmlyc3QnIGFuZCAnc2Vjb25kJyBhcmUg
bmV2ZXIgYXJndW1lbnQgcmVnaXN0ZXIsIG9yIHdpbGwgYmUgcHVzaGVkIG9uIHRoZSBzdGFjayBh
bnl3YXkKKyAgICAgICAgaWYgY29uc3RleHByICghSW5kZXgpIHsKKyAgICAgICAgICAgIGlmIGNv
bnN0ZXhwciAoc2l6ZU9mQ3VycmVudEFyZyA8PSA0KSB7CisgICAgICAgICAgICAgICAgVU5VU0VE
X1BBUkFNKHNlY29uZCk7IC8vIE90aGVyd2lzZSB3YXJuaW5nIGR1ZSB0byBjb25zdGV4cHIKKyAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGZpcnN0KTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyB7IHNl
Y29uZCwgZmlyc3QgfTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhw
cihzaXplT2ZDdXJyZW50QXJnIDw9IDQpIHsKKyAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0o
Zmlyc3QpOyAvLyBPdGhlcndpc2Ugd2FybmluZyBkdWUgdG8gY29uc3RleHByCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJnTnVtLCBJbmRleCAtIDE+KHNl
Y29uZCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRF9XSVRIX01FU1NBR0UoIk91dCBvZiByZWdpc3RlcnMiKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB1bnNpZ25l
ZCBBcmdOdW0sIHVuc2lnbmVkIEluZGV4ID0gQXJnTnVtLCB0eXBlbmFtZS4uLiBBcmdzPgorICAg
IHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcGlja0pTUihHUFJSZWcgZmlyc3QpCisgICAg
eworICAgICAgICBjb25zdGV4cHIgc2l6ZV90IHNpemVPZkN1cnJlbnRBcmcgPSBzaXplT2ZBcmc8
T3BlcmF0aW9uVHlwZSwgQXJnTnVtIC0gSW5kZXg+KCk7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
c2l6ZU9mQ3VycmVudEFyZyA8PSA4LCAiRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGxhcmdlIGFy
Z3VtZW50cyIpOworICAgICAgICAvLyBCYXNlIGNhc2UsICdmaXJzdCcgaXMgbmV2ZXIgYW4gYXJn
dW1lbnQgcmVnaXN0ZXIsIG9yIHdpbGwgYmUgcHVzaGVkIG9uIHRoZSBzdGFjayBhbnl3YXkKKyAg
ICAgICAgaWYgY29uc3RleHByIChzaXplT2ZDdXJyZW50QXJnIDw9IDQpCisgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGZpcnN0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRURfV0lUSF9NRVNTQUdFKCJPdXQgb2Yg
cmVnaXN0ZXJzIik7CisgICAgfQorI2VuZGlmCisKK3B1YmxpYzoKKyAgICAvLyBTZWUgcHJlZmVy
cmVkQXJndW1lbnRHUFIgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24uIFRoaXMgdmVy
c2lvbiByZXR1cm5zIGEgSlNWYWx1ZVJlZ3MKKyAgICAvLyBpbnN0ZWFkIG9mIGEgR1BSLCB3aGlj
aCBvbiBKU1ZBTFVFNjQgYXJlIGVxdWl2YWxlbnQsIGJ1dCBvbiBKU1ZBTFVFMzJfNjQgYSBKU1Zh
bHVlUmVncyBpcworICAgIC8vIHJlcXVpcmVkIHRvIGhvbGQgYSA2NC1iaXQgd2lkZSBmdW5jdGlv
biBhcmd1bWVudCwgc28gdXNlIHRoaXMgaW4gcGFydGljdWxhciB3aGVuIHBhc3NpbmcgYQorICAg
IC8vIEpTVmFsdWUvRW5jb2RlZEpTVmFsdWUgYmUgY29tcGF0aWJsZSB3aXRoIGJvdGggSlNWQUxV
RTY0IGFuIEpTVkFMVUUzMl82NCBwbGF0Zm9ybXMsIGFuZCB1c2UKKyAgICAvLyBwcmVmZXJyZWRB
cmd1bWVudEdQUiB3aGVuIHBhc3NpbmcgaG9zdCBwb2ludGVycy4KKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgQXJnTnVtPgorICAgIHN0YXRpYyBjb25zdGV4
cHIgc3RkOjplbmFibGVfaWZfdDwoRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46OmFyaXR5
ID4gQXJnTnVtKSwgSlNWYWx1ZVJlZ3M+CisgICAgcHJlZmVycmVkQXJndW1lbnRKU1IoKQorICAg
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorI2lmICFPUyhXSU5ET1dTKQorICAgICAgICByZXR1cm4g
cGlja0pTUjxPcGVyYXRpb25UeXBlLCBBcmdOdW0+KAorICAgICAgICAgICAgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwK
KyAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5mbzo6YXJndW1lbnRHUFI0
LCBHUFJJbmZvOjphcmd1bWVudEdQUjUpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIHBpY2tKU1I8
T3BlcmF0aW9uVHlwZSwgQXJnTnVtPigKKyAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BS
MCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsCisgICAgICAg
ICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjMsIEdQUkluZm86Om5vbkFyZ0dQUjAsICAgR1BSSW5m
bzo6bm9uQXJnR1BSMSk7CisjZW5kaWYKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisjaWYgQ1BV
KEFSTV9USFVNQjIpCisgICAgICAgIC8vIFRoZSBsYXN0IHJlZ2lzdGVyIGlzIGd1YXJhbnRlZWQg
dG8gYmUgcHVzaGVkIG9udG8gdGhlIHN0YWNrIGZvciBjYWxscywgc28gd2UgY2FuIHVzZQorICAg
ICAgICAvLyB0aGUgbGluayByZWdpc3RlciBhcyBhIHRlbXBvcmFyeS4KKyAgICAgICAgcmV0dXJu
IHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJnTnVtPigKKyAgICAgICAgICAgIEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIs
CisgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjMsIEdQUkluZm86OnJlZ1Q3LCAgICAg
ICAgR1BSSW5mbzo6cmVnVDYsCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUNCwgICAgICAgIEdQ
UkluZm86OnJlZ1Q1LCAgICAgICAgQVJNUmVnaXN0ZXJzOjpscik7CisjZWxpZiBDUFUoTUlQUykK
KyAgICAgICAgcmV0dXJuIHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJnTnVtPigKKyAgICAgICAg
ICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIsCisgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjMsIEdQUklu
Zm86OnJlZ1QyLCAgICAgICAgR1BSSW5mbzo6cmVnVDMsCisgICAgICAgICAgICBHUFJJbmZvOjpy
ZWdUNCwgICAgICAgIEdQUkluZm86OnJlZ1Q1LCAgICAgICAgR1BSSW5mbzo6cmVnVDYpOworI2Vu
ZGlmCisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBDb21wdXRlcyAoc3RhdGljYWxseSwgYXQgY29t
cGlsYXRpb24gdGltZSksIHRoZSBpZGVhbCBtYWNoaW5lIHJlZ2lzdGVyIGFuIGFyZ3VtZW50IHNo
b3VsZCBiZQorICAgIC8vIGxvYWRlZCBpbnRvIGZvciBhIGZ1bmN0aW9uIGNhbGwuIFRoaXMgeWll
bGRzIHRoZSBBQkkgc3BlY2lmaWMgYXJndW1lbnQgcmVnaXN0ZXJzIGZvciB0aGUKKyAgICAvLyBp
bml0aWFsIGFyZ3VtZW50cyBhcyBhcHByb3ByaWF0ZSwgdGhlbiBzdWl0YWJsZSB0ZW1wb3Jhcnkg
cmVnaXN0ZXJzIGZvciB0aGUgcmVtYWluaW5nCisgICAgLy8gYXJndW1lbnRzLiBUaGUgaWRlYSBp
cyB0aGF0ICdzZXR1cEFyZ3VtZW50cycgd2lsbCBoYXZlIHRvIGRvIHRoZSBtaW5pbWFsIGFtb3Vu
dCBvZiB3b3JrIHdoZW4KKyAgICAvLyB1c2luZyB0aGVzZSByZWdpc3RlcnMgdG8gaG9sZCB0aGUg
YXJndW1lbnRzLCBzbyBpZiB5b3UgYXJlIGxvYWRpbmcgbW9zdCBhcmd1bWVudHMgZnJvbSBtZW1v
cnkKKyAgICAvLyBhbnl3YXksIHVzaW5nIHRoZXNlIHJlZ2lzdGVycyB5aWVsZHMgdGhlIHNtYWxs
ZXN0IGNvZGUgcmVxdWlyZWQgZm9yIGEgY2FsbC4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdW5zaWduZWQgQXJnTnVtPgorICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpl
bmFibGVfaWZfdDwoRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46OmFyaXR5ID4gQXJnTnVt
KSwgR1BSUmVnPgorICAgIHByZWZlcnJlZEFyZ3VtZW50R1BSKCkKKyAgICB7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplT2ZBcmc8T3BlcmF0aW9uVHlw
ZSwgQXJnTnVtPigpIDw9IDQsICJBcmd1bWVudCBkb2VzIG5vdCBmaXQgaW4gR1BSIik7CisjZW5k
aWYKKyAgICAgICAgcmV0dXJuIHByZWZlcnJlZEFyZ3VtZW50SlNSPE9wZXJhdGlvblR5cGUsIEFy
Z051bT4oKS5wYXlsb2FkR1BSKCk7CisgICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKaW5kZXggYTE3
NjI0NGUxZTMwOTU2Njc3MzQ2MGFkMjA2NTBlMTliYzNkYWQ2OC4uYmNiNTJlNzliOGZlODIxNDJl
ZThkZjNlNTE1NTczNDljMjQ5ZGMwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBB
bnkgcmVnaXN0ZXIgdGhhdCBoYXMgYmVlbiBsb2NrZWQgb3IgYWNxdWlyZWQgbXVzdCBiZSByZWxl
YXNlZAogICAgIC8vIGJlZm9yZSBjYWxsaW5nIHByZXBhcmVGb3JUYWlsQ2FsbCgpIG9yIHByZXBh
cmVGb3JTbG93UGF0aCgpLgorICAgIC8vIFVubGVzcyB5b3Uga25vdyB0aGUgcmVnaXN0ZXIgaXMg
bm90IHRoZSB0YXJnZXQgb2YgYSByZWNvdmVyeS4KICAgICB2b2lkIGxvY2tHUFIoR1BSUmVnIGdw
cikKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGdwcikpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAppbmRleCAyZjdjZjVhYmJiMzk5Y2E3NDQzZWFj
ODMyMDMyZjZjMDczYjQyYmM5Li5hMGI2MDQ1ZmQ2M2EwYjRiOTM2M2FkZjc5YzY0ODdlOTlmYTMz
M2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaApAQCAtNjksMTUgKzY5LDE2IEBA
IHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByID09IElu
dmFsaWRHUFJSZWc7IH0KICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gbV9ncHIgIT0gSW52YWxpZEdQUlJlZzsgfQogCi0gICAgYm9vbCBvcGVyYXRvcj09KEpTVmFs
dWVSZWdzIG90aGVyKSB7IHJldHVybiBtX2dwciA9PSBvdGhlci5tX2dwcjsgfQotICAgIGJvb2wg
b3BlcmF0b3IhPShKU1ZhbHVlUmVncyBvdGhlcikgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
IH0KKyAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KEpTVmFsdWVSZWdzIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX2dwciA9PSBvdGhlci5tX2dwcjsgfQorICAgIGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yIT0oSlNWYWx1ZVJlZ3Mgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOyB9CiAgICAgCiAgICAgR1BSUmVnIGdwcigpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByOyB9Ci0g
ICAgR1BSUmVnIHRhZ0dQUigpIGNvbnN0IHsgcmV0dXJuIEludmFsaWRHUFJSZWc7IH0KLSAgICBH
UFJSZWcgcGF5bG9hZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByOyB9Ci0gICAgCi0gICAgYm9v
bCB1c2VzKEdQUlJlZyBncHIpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByID09IGdwcjsgfQorICAgIGNv
bnN0ZXhwciBHUFJSZWcgdGFnR1BSKCkgY29uc3QgeyByZXR1cm4gSW52YWxpZEdQUlJlZzsgfQor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcGF5bG9hZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByOyB9
CiAgICAgCisgICAgY29uc3RleHByIGJvb2wgdXNlcyhHUFJSZWcgZ3ByKSBjb25zdCB7IHJldHVy
biBtX2dwciA9PSBncHI7IH0KKyAgICBjb25zdGV4cHIgYm9vbCBvdmVybGFwcyhKU1ZhbHVlUmVn
cyBvdGhlcikgY29uc3QgeyByZXR1cm4gdXNlcyhvdGhlci5wYXlsb2FkR1BSKCkpOyB9CisKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CkBAIC0xNjYs
NyArMTY3LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZVJlZ3Mo
R1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIpCisgICAgY29uc3RleHByIEpTVmFsdWVS
ZWdzKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSKQogICAgICAgICA6IG1fdGFnR1BS
KHRhZ0dQUikKICAgICAgICAgLCBtX3BheWxvYWRHUFIocGF5bG9hZEdQUikKICAgICB7CkBAIC0x
NzcsNyArMTc4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3MoZ3ByMSwg
Z3ByMik7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBKU1ZhbHVlUmVncyBwYXlsb2FkT25seShH
UFJSZWcgZ3ByKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcGF5bG9hZE9ubHko
R1BSUmVnIGdwcikKICAgICB7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyhJbnZhbGlkR1BS
UmVnLCBncHIpOwogICAgIH0KQEAgLTE4OSwxNSArMTkwLDE1IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHx8IHN0YXRpY19jYXN0PEdQUlJlZz4obV9wYXlsb2FkR1BSKSAhPSBJbnZhbGlkR1BSUmVn
OwogICAgIH0KIAotICAgIGJvb2wgb3BlcmF0b3I9PShKU1ZhbHVlUmVncyBvdGhlcikgY29uc3QK
KyAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KEpTVmFsdWVSZWdzIG90aGVyKSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fdGFnR1BSID09IG90aGVyLm1fdGFnR1BSCiAgICAgICAg
ICAgICAmJiBtX3BheWxvYWRHUFIgPT0gb3RoZXIubV9wYXlsb2FkR1BSOwogICAgIH0KLSAgICBi
b29sIG9wZXJhdG9yIT0oSlNWYWx1ZVJlZ3Mgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOyB9CisgICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShKU1ZhbHVlUmVncyBv
dGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KICAgICAKLSAgICBHUFJS
ZWcgdGFnR1BSKCkgY29uc3QgeyByZXR1cm4gbV90YWdHUFI7IH0KLSAgICBHUFJSZWcgcGF5bG9h
ZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1fcGF5bG9hZEdQUjsgfQorICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdGFnR1BSKCkgY29uc3QgeyByZXR1cm4gbV90YWdHUFI7IH0KKyAgICBjb25zdGV4cHIgR1BS
UmVnIHBheWxvYWRHUFIoKSBjb25zdCB7IHJldHVybiBtX3BheWxvYWRHUFI7IH0KICAgICBHUFJS
ZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNoKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNo
ICh3aGljaCkgewpAQCAtMjEwLDggKzIxMSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0
YWdHUFIoKTsKICAgICB9CiAKLSAgICBib29sIHVzZXMoR1BSUmVnIGdwcikgY29uc3QgeyByZXR1
cm4gbV90YWdHUFIgPT0gZ3ByIHx8IG1fcGF5bG9hZEdQUiA9PSBncHI7IH0KLSAgICAKKyAgICBj
b25zdGV4cHIgYm9vbCB1c2VzKEdQUlJlZyBncHIpIGNvbnN0IHsgcmV0dXJuIG1fdGFnR1BSID09
IGdwciB8fCBtX3BheWxvYWRHUFIgPT0gZ3ByOyB9CisgICAgY29uc3RleHByIGJvb2wgb3Zlcmxh
cHMoSlNWYWx1ZVJlZ3Mgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdXNlcyhv
dGhlci5wYXlsb2FkR1BSKCkpIHx8IHVzZXMob3RoZXIudGFnR1BSKCkpOworICAgIH0KKwogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAppbmRleCA2ZjJjZWQ3MzM5NjVhNmIwMmE5NzViYTQxYmMzYjc3NTA3
YjI4MWNmLi5iMTc5Yzg1MTUwZGQ5YzdkMzk5ZTBjYzczYWE5ZmU2NDRiYzgxMDA3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC04MDAsMTMgKzgwMCwxMSBAQCB2b2lkIEpJVDo6Y29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZz
ZXQgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICBsb2FkNjQoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zm
c2V0KSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgICAgIGNvbnN0ZXhw
ciBKU1ZhbHVlUmVncyByZXN1bHRSZWdzIHsgcmVnVDAgfTsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICAgICAgICAgICAgICBsb2FkMzIo
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgICAg
ICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyB7IHJlZ1QxLCByZWdUMCB9OwogI2Vu
ZGlmCisgICAgICAgICAgICAgICAgbG9hZFZhbHVlKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIs
IG9mZnNldCksIHJlc3VsdFJlZ3MpOwogICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0
UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZh
bHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTkzOSw3ICs5MzcsNiBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1dG8mIGdlbmVy
YXRvcnMpIHsKICAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7CiAgICAgICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKQEAgLTk1OSwzMSArOTU2LDEw
IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKICAgICBm
aW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKICAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzKTsKLSNlbHNlCi0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywg
cGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRj
aEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBw
YXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hC
dWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZl
cik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7Ci0jZW5kaWYKIAog
ICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8g
PSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOwogICAgICAgICBpbmZvLmRv
bmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29t
cGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7Ci0jZWxzZQotICAgICAgICBDYWxsTGlua0luZm8m
IGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaW5mby5zZXRD
b2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCi0gICAgICAgICAgICBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5k
b25lTG9jYXRpb24pKTsKLSNlbmRpZgotCiAgICAgfQogCiAgICAgSklUQ29kZU1hcEJ1aWxkZXIg
aml0Q29kZU1hcEJ1aWxkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCA4MWE5OWRhMThk
MDlkNzA4YWRiZTljN2YwYThkOGU2OWMzZmIxZWIwLi5lMWI0ODIwNjhjYjc3OTI1YWJlMTc4ZjFh
ZGU5NTNmMjUzYjQzMzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTE1MiwxMyArMTUy
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJ
bmZvOwogICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0
YW50OwotI2Vsc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7
Ci0gICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwotI2VuZGlmCiAgICAgfTsKIAog
ICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwpAQCAtMjk0LDcg
KzI4OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmRleCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKKwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAg
ICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9w
X2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zMDYsMTkgKzMwMSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzCiAgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKLSNl
bHNlCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PAotICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKLSAgICAgICAgICAgICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLSAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKLSAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9
PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdz
Ci0gICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
T3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAs
IHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7Ci0jZW5k
aWYKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxl
VGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKQEAgLTM1NSw5ICszMzcs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJv
ZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29u
c3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7
CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVj
b2RlJiwgSlNWYWx1ZVJlZ3MgY2VsbEpTUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgotICAgICAgICB2b2lkIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJ
RCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgSlNWYWx1
ZVJlZ3MgY2VsbEpTUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAtNDI2LDYg
KzQwOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
IAorICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChKU1ZhbHVlUmVncyk7
CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKEpTVmFsdWVSZWdzLCBW
aXJ0dWFsUmVnaXN0ZXIpOworCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXgg
ZmM4MWE1ZTkwYjQ3OWZhZGI2NzYwMzAxNzU5Mjc1MTEzNzMwODQwNy4uNzNkN2MwN2YwNDQ0MmVl
NDVmNmM2YTdjOTIxZWI4MGZiYWRjOTIyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFC
TEUoSklUKQotI2lmIFVTRShKU1ZBTFVFNjQpCisKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1
ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCkBAIC00MiwxMyArNDIsNDMgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmV0dXJuVmFsdWVKU1IgeyBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiB9OworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgeyBHUFJJbmZv
OjpyZWdUMCB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBjb25zdGV4cHIgSlNWYWx1
ZVJlZ3MgcmV0dXJuVmFsdWVKU1IgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSIH07CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7
IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9OworI2VuZGlmCit9CisKK3ZvaWQgSklU
OjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoY2FsbEZyYW1lUmVnaXN0ZXIp
KTsKKworICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSIChyZXR1cm5W
YWx1ZUdQUjIvcmV0dXJuVmFsdWVHUFIgb24gMzItYml0KS4KKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlSlNSKTsKKworI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAg
IHJldCgpOworI2Vsc2UKKyAgICBlbWl0TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0dWIob3Bf
cmV0X2hhbmRsZXJHZW5lcmF0b3IpLmNvZGUoKSk7CisjZW5kaWYKK30KKworCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNv
ZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZXR1cm5WYWx1ZUpTUik7CiB9CiAK
KwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzCkBAIC02MiwxMCArOTIsMTIgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiAKIAogICAgIGlmIChPcDo6
b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKLSAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAg
ICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsK
KyAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHRtcEpTUiA9IHJldHVyblZhbHVlSlNSOwor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHRtcEdQUiA9IHRtcEpTUi5wYXlsb2FkR1BSKCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zm
c2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCB0bXBKU1Ip
OworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwodG1wSlNSKTsKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3ModG1wSlNSLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgdG1wR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRl
Y29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2Fs
bExpbmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRP
Zkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9
CiAKQEAgLTczLDcgKzEwNSw2IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpcyksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKTsKIH0KIAotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQg
PT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTg2LDI5ICsxMTcsNTAgQEAgSklUOjpjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
Y2FsbExpbmtJbmYKICAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0
RnJlZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVhbCByZWdpc3RlciBp
ZiB3ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0g
Ynl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCByZWdUMSk7Ci0gICAgWl9KSVRPcGVyYXRpb25fR0paWiBzaXplT3BlcmF0aW9uOwot
ICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQot
ICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3Vt
ZW50czsKLSAgICBlbHNlCi0gICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJh
bWVGb3JWYXJhcmdzOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZp
cnN0VmFyQXJnT2Zmc2V0KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0
ZXIpLCByZWdUMSk7Ci0gICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVH
UFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOworICAgIHsKKyAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxaX0pJVE9wZXJhdGlvbl9H
SlpaLCAwPigpOworICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzSlNSID0g
cHJlZmVycmVkQXJndW1lbnRKU1I8Wl9KSVRPcGVyYXRpb25fR0paWiwgMT4oKTsKKworICAgICAg
ICBaX0pJVE9wZXJhdGlvbl9HSlpaIHNpemVPcGVyYXRpb247CisgICAgICAgIGlmIChPcDo6b3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAgICAgICAgc2l6
ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVG
b3JWYXJhcmdzOworCisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0pTUik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgZ2xvYmFsT2JqZWN0R1BSLCBh
cmd1bWVudHNKU1IsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CisgICAg
ICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVn
VDEsIHJlZ1QxKTsKKyAgICB9CisKKyAgICAvLyBUT0RPOiBXSFkgVEhFIERJRkZFUkVOQ0U/Pwor
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5
dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMik7Ci0gICAgRl9K
SVRPcGVyYXRpb25fR0ZKWlogc2V0dXBPcGVyYXRpb247Ci0gICAgaWYgKE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCi0gICAgICAgIHNldHVwT3BlcmF0aW9u
ID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7Ci0gICAgZWxzZQotICAgICAg
ICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJl
Z1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7Ci0gICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2b2lkKikpKSks
IHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIHsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzSlNSIHsg
cmVnVDIgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBhcmd1bWVudHNKU1IgeyByZWdUMywgcmVnVDIgfTsKKyNlbmRpZgorCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNKU1IpOworICAgICAg
ICBGX0pJVE9wZXJhdGlvbl9HRkpaWiBzZXR1cE9wZXJhdGlvbjsKKyAgICAgICAgaWYgKE9wOjpv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAgICAgICAgICBz
ZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFy
YXJnc0ZyYW1lOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDQsIHJlZ1QxLCBhcmd1bWVudHNKU1IsIGZp
cnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJl
Z1Q1KTsKKyAgICB9CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNl
dCksIHJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUNSwgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKICAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJ
bmZvQ29uc3RhbnQsIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJ
bmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CiAg
ICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CkBAIC0x
MTYsMTAgKzE2OCwxMSBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZgogICAgIG5vdEJpZ2dlc3Qu
bGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHRoaXNWYWx1ZSwgcmVnVDApOwotICAgIHN0b3JlNjQocmVnVDAsIEFk
ZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHRo
aXNKU1IgPSBjYWxsZWVKU1I7IC8vIFVzZWQgYXMgdGVtcG9yYXJ5IHJlZ2lzdGVyCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHRoaXNKU1IpOworICAgIHN0b3JlVmFsdWUo
dGhpc0pTUiwgQWRkcmVzcyhyZWdUNSwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIAotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSksIHJlZ1Q1LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgpAQCAtMTM5LDcgKzE5Miw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3Qg
T3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9l
Y21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmV0dXJuVmFsdWVKU1IpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsK
IApAQCAtMTU4LDcgKzIxMSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzCiAKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAKLSAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9m
KFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSksIHJlZ1QwKTsKKyAgICBsb2FkVmFsdWUoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSksIGNhbGxlZUpTUik7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7
CiAgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5m
byk7CiAgICAgcmVzZXRTUCgpOwpAQCAtMTc4LDcgKzIzMSw5IEBAIGJvb2wgSklUOjpjb21waWxl
VGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZv
KiBpbmZvCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxl
RGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CiAgICAgc2h1ZmZsZURh
dGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CiAgICAgc2h1ZmZsZURhdGEtPm51
bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyNlbmRpZgogICAgIHNodWZmbGVEYXRhLT5udW1Mb2Nh
bHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykg
LyBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29k
ZS5tX2FyZ2MpOwpAQCAtMTg4LDEyICsyNDMsMTkgQEAgYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8K
ICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAg
ICB9Ci0gICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1Qw
LCBEYXRhRm9ybWF0SlMpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc2h1ZmZsZURhdGEtPmNh
bGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIERhdGFG
b3JtYXRKUyk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHNodWZmbGVEYXRhLT5jYWxs
ZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBjYWxsZWVKU1Iu
cGF5bG9hZEdQUigpKTsKKyNlbmRpZgogICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVS
ZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKIAotICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVn
VDIpOwotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKLSAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKKyAgICBsb2FkQ29u
c3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7CisgICAgSnVtcExp
c3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgq
dGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBbJl0geworICAg
ICAgICBDYWxsRnJhbWVTaHVmZmxlciBzaHVmZmxlciB7ICp0aGlzLCAqc2h1ZmZsZURhdGEgfTsK
KyAgICAgICAgc2h1ZmZsZXIubG9ja0dQUihjYWxsTGlua0luZm9HUFIpOworICAgICAgICBzaHVm
Zmxlci5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93
UGF0aHMpOwogCkBAIC0yNDYsMjAgKzMwOCwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAog
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBo
b2xkcyBjYWxsZWUuCi0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVKU1IpOworICAgIHN0b3JlVmFsdWUoY2FsbGVlSlNSLCBB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSk7CiAKICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJu
OwogCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAvLyBXZSBuZWVkIHRoaXMgb24gSlNWQUxV
RTMyXzY0IG9ubHkgYXMgb24gSlNWQUxVRTY0IGEgcG9pbnRlciBjb21wYXJpc29uIGluIHRoZSBE
YXRhSUMgZmFzdAorICAgIC8vIHBhdGNoIGNhdGNoZXMgdGhpcy4KKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwoY2FsbGVlSlNSKSk7CisjZW5kaWYKKwogICAgIGlmIChjb21waWxlVGFp
bENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCByZWdUMik7
CisgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKKyAgICBsb2Fk
Q29uc3RhbnQoaW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOwogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86
OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7Cisg
ICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNG
YXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBb
Jl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAgICAg
cHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CisgICAgICAgICAgICBwcmVwYXJlRm9yVGFp
bENhbGxTbG93KGNhbGxMaW5rSW5mb0dQUik7CiAgICAgICAgIH0pOwogICAgICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aHMpOwogICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CkBA
IC0yNjcsNyArMzM2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxs
TGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIo
KSwgY2FsbExpbmtJbmZvR1BSKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIApAQCAtNDAzLDIwICs0NzIsMTkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
CiAKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwotICAgIC8v
IGNhbGwgcmVzdWx0IChpdGVyYXRvcikgaXMgaW4gcmVnVDAKKworICAgIC8vIGNhbGwgcmVzdWx0
IChpdGVyYXRvcikgaXMgaW4gcmVnVDAgKHJlZ1QxL3JlZ1QwIG9yIDMyLWJpdCkKKworICAgIHVz
aW5nIG5hbWVzcGFjZSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM7CisgICAgc3RhdGljX2Fzc2Vy
dCghcmV0dXJuVmFsdWVKU1IudXNlcyhzdHViSW5mb0dQUikpOwogCiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwotICAgIAotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgbW92ZShyZWdUMCwgYmFzZUdQUik7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZXR1cm5WYWx1ZUpTUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwo
KSksIHJldHVyblZhbHVlSlNSLCByZXN1bHRKU1IsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkdldEJ5SWQ7CkBAIC00MzAsOCArNDk4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVzdWx0SlNSKTsKIAogICAgIGZhc3RDYXNlLmxpbmso
dGhpcyk7CiB9CkBAIC00NDMsMTAgKzUxMSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Qwog
ICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgSlNWYWx1ZVJlZ3MgaXRlcmF0b3JKU1IgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1I7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7Ci0gICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikpOworICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9ySlNSKSk7CisgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckpTUikpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbmV4dFZSZWcgPSBieXRlY29kZS5tX25leHQ7CkBAIC00NTYsMTAgKzUyNCwyMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93QwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCi0gICAgbW92ZShpdGVyYXRvckdQUiwgYXJndW1lbnRHUFIyKTsKLSAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIG5leHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09w
ZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJnMkpTUiA9IHByZWZl
cnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisKKyAgICBtb3ZlVmFsdWVSZWdz
KGl0ZXJhdG9ySlNSLCBhcmcySlNSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPFNsb3dPcGVy
YXRpb24+KAorICAgICAgICBieXRlY29kZSwKKyAgICAgICAgQWRkcmVzcyhzdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwKKyAgICAgICAgbmV4
dFZSZWcsCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIGFyZzJKU1IsCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogCiAgICAgYXV0byBkb25lID0ganVtcCgpOwpAQCAtNDgzLDggKzU2MSwx
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbikKICAgICAgICAgfQogICAgIH0pKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwotICAgIEp1bXAgZ2VuZXJpY0Nhc2UgPSBi
cmFuY2hJZk5vdEVtcHR5KHJlZ1QwKTsKKyAgICB1c2luZyBuYW1lc3BhY2UgQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOworCisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIG5leHRKU1IgPSBiYXNl
SlNSOyAvLyBVc2VkIGFzIHRlbXBvcmFyeSByZWdpc3RlcgorICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBuZXh0SlNSKTsKKyAgICBKdW1wIGdlbmVyaWNDYXNlID0g
YnJhbmNoSWZOb3RFbXB0eShuZXh0SlNSKTsKIAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKQEAgLTQ5NiwyNCArNTc3LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogICAgIHN0b3JlOFRvTWV0
YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9m
SXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVu
TW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24s
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsK
LSAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdUMAog
Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c3R1YkluZm87Ci0gICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3RlcjsKLSAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgLy8gY2FsbCByZXN1bHQg
KHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4gcmVnVDAgIChyZWdUMS9yZWdUMCBvciAzMi1i
aXQpCisgICAgc3RhdGljX2Fzc2VydCghcmV0dXJuVmFsdWVKU1IudXNlcyhzdHViSW5mb0dQUikp
OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGl0ZXJDYWxsUmVzdWx0SlNS
ID0gZG9udENsb2JiZXJKU1I7CisgICAgbW92ZVZhbHVlUmVncyhyZXR1cm5WYWx1ZUpTUiwgaXRl
ckNhbGxSZXN1bHRKU1IpOworCisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGRvbmVKU1IgPSBy
ZXN1bHRKU1I7CiAgICAgewotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocmV0dXJu
VmFsdWVHUFIgPT0gYmFzZUdQUik7Ci0KLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmV0dXJu
VmFsdWVKU1IpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3Mu
YWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5zZXQoaXRlckNh
bGxSZXN1bHRKU1IpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwo
KSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpKSwgcmV0dXJuVmFsdWVKU1IsIGRvbmVKU1IsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKIAogICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKQEAgLTUyNywyOCArNjA2LDI2IEBAIHZvaWQgSklU
OjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQog
ICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsg
ZG9uZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rv
bmUsIGRvbmVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBk
b25lSlNSKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUs
IGRvbmVKU1IpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAog
ICAgIHsKLSAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2Fs
bFJlc3VsdEdQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUpTUiwg
aXRlckNhbGxSZXN1bHRKU1IpOwogICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2Ny
YXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
c2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAg
R1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
ZmFsc2U7CiAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKLSAgICAgICAgSnVt
cExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRv
bmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRl
cmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIGRvbmVKU1IsIHNjcmF0Y2gxLCBzY3Jh
dGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBnbG9iYWxHUFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgbW92ZShp
dGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CisgICAgICAgIG1vdmVWYWx1ZVJlZ3MoaXRlckNh
bGxSZXN1bHRKU1IsIGJhc2VKU1IpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAogICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBiYXNlSlNS
LCByZXN1bHRKU1IsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAogICAgICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CiAgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZDsKQEAgLTU2Miw4ICs2MzksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKICAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKLSAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRKU1IpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3VsdEpTUik7CiAK
ICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAgLTU3Nyw3ICs2NTQs
OSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93QwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
Ojpkb250Q2xvYmJlclJlZ2lzdGVyOworICAgIHVzaW5nIG5hbWVzcGFjZSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM7CisKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgaXRlckNhbGxSZXN1bHRK
U1IgPSBkb250Q2xvYmJlckpTUjsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewpAQCAtNTg1LDI1ICs2NjQsMzQgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0MKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAg
ICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0SlNSKSk7CiAKICAgICAgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAgICAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKICAgICAgICAgCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRH
UFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2Fs
bFJlc3VsdEpTUikpOwogCi0gICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50
R1BSMik7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICAgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAg
dXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJn
dW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7Cisg
ICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBhcmcySlNSID0gcHJlZmVycmVkQXJndW1lbnRK
U1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKIAorICAgICAgICBtb3ZlVmFsdWVSZWdzKGl0ZXJDYWxs
UmVzdWx0SlNSLCBhcmcySlNSKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3RHUFIpOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
PFNsb3dPcGVyYXRpb24+KAorICAgICAgICAgICAgYnl0ZWNvZGUsCisgICAgICAgICAgICBBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLAorICAgICAgICAgICAgZG9uZVZSZWcsCisgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIs
IHN0dWJJbmZvR1BSLCBhcmcySlNSLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKICAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCi0gICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0OwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lR1BSKTsK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2Fs
bFJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBkb25lSlNSID0gcmVz
dWx0SlNSOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lSlNS
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVy
Q2FsbFJlc3VsdEpTUik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChq
dW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwpAQCAtNjIwLDE1ICs3MDgs
MjQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0MKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAotICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVu
dEdQUjIpOwotICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgICAg
ICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRB
cmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsK
KyAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFyZzJKU1IgPSBwcmVmZXJyZWRBcmd1bWVu
dEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAgICAgIG1vdmVWYWx1ZVJlZ3MoaXRlckNh
bGxSZXN1bHRKU1IsIGFyZzJKU1IpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdEdQUik7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oCisgICAgICAgICAgICBieXRl
Y29kZSwKKyAgICAgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgICAgICB2YWx1ZVZSZWcsCisgICAg
ICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBhcmcySlNSLAorICAgICAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGE4N2Y5YjkwYTViZGYxMzdkN2Y4MWM5NGJhMWY5ZjZmMDgzMDY5MzIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsMzJfNjQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjM3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhLCBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShKSVQpCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSNpbmNsdWRlICJKSVQu
aCIKLQotI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJKSVRJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUg
Ik9wY29kZUlubGluZXMuaCIKLSNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCi0jaW5jbHVkZSAiU2V0
dXBWYXJhcmdzRnJhbWUuaCIKLSNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKLSNpbmNsdWRlICJT
dGFja0FsaWdubWVudC5oIgotI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgotI2luY2x1ZGUg
PHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVj
b2RlKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOwotICAgIGVtaXRTdG9yZShkZXN0aW5hdGlvbkZvcihieXRlY29kZSwg
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QxLCBy
ZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUmV0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7Ci0KLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwot
ICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgcmV0KCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxFdmFsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgpOwotfQotIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nh
bGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRh
aWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0gICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29u
c3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0gICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29u
c3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsPE9wQ2FsbD4oY3VycmVudElu
c3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdF9v
cF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBjb21waWxlT3BDYWxsPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF9ldmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wQ2FsbDxPcENh
bGxFdmFsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBjb21waWxlT3BDYWxsPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGw8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLSAgICAKLXZv
aWQgSklUOjplbWl0X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdFZhcmFyZ3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLSAgICAKLXZv
aWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE9w
Pgotc3RkOjplbmFibGVfaWZfdDwKLSAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwotICAgICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzCi0sIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKLXsKLSAgICB1bnNpZ25lZCBjaGVja3Bv
aW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBpbnQgYXJnQ291bnQgPSBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2ludCk7Ci0gICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oc3RhY2tPZmZzZXRJblJlZ2lz
dGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKLQotICAgIGlmIChPcDo6b3Bjb2Rl
SUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgZW1pdExv
YWQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCwgcmVnVDEpOwotICAgICAgICBKdW1wIGRvbmUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICBzdG9yZTMyVG9N
ZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExp
bmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFy
cmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwotICAgICAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgfQotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9m
ZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKGFyZ0NvdW50KSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXN0ZDo6ZW5hYmxlX2lmX3Q8Ci0gICAgT3A6
Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MKLSAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotLCB2b2lk
PgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5m
byogaW5mbykKLXsKLSAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwotICAgIGludCBm
aXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNldCgpOwotICAgIGlu
dCBmaXJzdFZhckFyZ09mZnNldCA9IGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmc7Ci0KLSAgICBlbWl0
TG9hZChhcmd1bWVudHMsIHJlZ1QxLCByZWdUMCk7Ci0gICAgWl9KSVRPcGVyYXRpb25fR0paWiBz
aXplT3BlcmF0aW9uOwotICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKQotICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1l
Rm9yRm9yd2FyZEFyZ3VtZW50czsKLSAgICBlbHNlCi0gICAgICAgIHNpemVPcGVyYXRpb24gPSBv
cGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJh
dGlvbiwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKLSAgICBlbWl0
U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdU
MSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAr
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDYgKiBzaXpl
b2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGVtaXRMb2Fk
KGFyZ3VtZW50cywgcmVnVDIsIHJlZ1Q0KTsKLSAgICBGX0pJVE9wZXJhdGlvbl9HRkpaWiBzZXR1
cE9wZXJhdGlvbjsKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKQotICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFy
Z3VtZW50c0ZyYW1lOwotICAgIGVsc2UKLSAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRp
b25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJl
Z1QyLCByZWdUNCksIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7Ci0gICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgcmVnVDEpOwotCi0gICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCi0g
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRP
ZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gz
MihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNz
T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKLSAgICBub3RCaWdnZXN0Lmxpbmso
dGhpcyk7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCi0gICAgZW1pdExvYWQodGhp
c1ZhbHVlLCByZWdUMiwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEs
IFBheWxvYWRPZmZzZXQgKyAoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKSk7Ci0gICAgc3RvcmUzMihyZWdUMiwgQWRk
cmVzcyhyZWdUMSwgVGFnT2Zmc2V0ICsgKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSkpOwotICAgIAotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDEsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29t
cGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBs
YXRlPD4KLWJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNv
ZGUpCi17Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsK
LSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShyZWdUMSkpOwotCi0gICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpKTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBy
ZWdUMCk7Ci0KLSAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwotICAg
IFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLQotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKLQotICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0Vmly
dHVhbENhbGwoKm1fdm0sIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZv
KTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0K
LSAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCi17Ci0gICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBPcDo6b3Bjb2RlSUQ7Ci0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gY2FsbGVlRm9yKGJ5dGVjb2RlLCBt
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKTsKLQotICAgIC8qIENhbGxlciBhbHdheXM6Ci0g
ICAgICAgIC0gVXBkYXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgot
ICAgICAgICAtIEluaXRpYWxpemVzIEFyZ3VtZW50Q291bnQ7IENhbGxlckZyYW1lOyBDYWxsZWUu
Ci0KLSAgICAgICBGb3IgYSBKUyBjYWxsOgotICAgICAgICAtIENhbGxlZSBpbml0aWFsaXplcyBS
ZXR1cm5QQzsgQ29kZUJsb2NrLgotICAgICAgICAtIENhbGxlZSByZXN0b3JlcyBjYWxsRnJhbWVS
ZWdpc3RlciBiZWZvcmUgcmV0dXJuLgotCi0gICAgICAgRm9yIGEgbm9uLUpTIGNhbGw6Ci0gICAg
ICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCi0gICAgICAgIC0g
Q2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KLSAgICAqLwot
ICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9w
X2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmFkZENhbGxM
aW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZy
YW1lKGJ5dGVjb2RlLCBpbmZvKTsKLSAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAg
ICAKLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5ieXRlY29k
ZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0
ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihs
b2NhdGlvbkJpdHMpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpKTsKLSAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCBy
ZWdUMCBob2xkcyBjYWxsZWUuCi0KLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KyBUYWdPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLQotICAgIGlmIChjb21w
aWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbmZvLT5zZXRV
cENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBB
U1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7
Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkp
OwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJ
bmZvID0gaW5mbzsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwot
Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBhdXRvIHNs
b3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgWyZdIHsK
LSAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgIHByZXBh
cmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwotICAgICAgICB9KTsKLSAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGhzKTsKLSAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwotICAg
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlv
biA9IGRvbmVMb2NhdGlvbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc2xv
d1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5r
SW5mbzo6VXNlRGF0YUlDOjpObyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKLSAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxh
YmVsKCk7Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7Ci0KLSAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKLXsKLSAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IE9wOjpvcGNvZGVJRDsKLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKLSAg
ICAgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoaW5zdHJ1Y3Rpb24sIGl0ZXIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxh
YmVsKCk7Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cykKLSAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExp
bmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsKLQotICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGFib3J0
V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwotCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBlbWl0
UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9y
X29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7Ci0gICAgYXV0byogdHJ5RmFz
dEZ1bmN0aW9uID0gKFsmXSAoKSB7Ci0gICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRo
KCkpIHsKLSAgICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9vcGVuX3RyeV9mYXN0
X25hcnJvdzsKLSAgICAgICAgY2FzZSBXaWRlMTY6IHJldHVybiBpdGVyYXRvcl9vcGVuX3RyeV9m
YXN0X3dpZGUxNjsKLSAgICAgICAgY2FzZSBXaWRlMzI6IHJldHVybiBpdGVyYXRvcl9vcGVuX3Ry
eV9mYXN0X3dpZGUzMjsKLSAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgfQotICAgIH0pKCk7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwotICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Ci0gICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4o
SXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKLQotICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRv
ck9wZW4+KGluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotCi0gICAgYWR2YW5j
ZVRvTmV4dENoZWNrcG9pbnQoKTsKLSAgICAKLSAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3Ip
IGlzIGluIHJlZ1QxICh0YWcpL3JlZ1QwIChwYXlsb2FkKQotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwotCi0gICAgR1BSUmVnIHRhZ0l0ZXJhdG9yR1BSID0g
cmVnVDE7Ci0gICAgR1BSUmVnIHBheWxvYWRJdGVyYXRvckdQUiA9IHJlZ1QwOwotCi0gICAgR1BS
UmVnIHRhZ05leHRHUFIgPSB0YWdJdGVyYXRvckdQUjsKLSAgICBHUFJSZWcgcGF5bG9hZE5leHRH
UFIgPSBwYXlsb2FkSXRlcmF0b3JHUFI7Ci0KLSAgICBKU1ZhbHVlUmVncyBuZXh0UmVncyA9IEpT
VmFsdWVSZWdzKHRhZ05leHRHUFIsIHBheWxvYWROZXh0R1BSKTsKLQotICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAotICAgICAgICBKSVRU
eXBlOjpCYXNlbGluZUpJVCwKLSAgICAgICAgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAot
ICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudC0+aW1wbCgpKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRlcmF0b3JHUFIsIHBh
eWxvYWRJdGVyYXRvckdQUiksCi0gICAgICAgIG5leHRSZWdzLAotICAgICAgICBJbnZhbGlkR1BS
UmVnLAotICAgICAgICBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgbmV4dFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9uZXh0LCBuZXh0UmVncyk7Ci0KLSAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVy
YXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotICAg
IGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwotCi0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyB0YWdJdGVyYXRvckdQUiA9IHJlZ1QxOwotICAg
IEdQUlJlZyBwYXlsb2FkSXRlcmF0b3JHUFIgPSByZWdUMDsKLQotICAgIEp1bXBMaXN0IG5vdE9i
amVjdDsKLSAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh0YWdJdGVyYXRvckdQ
UikpOwotICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocGF5bG9hZEl0ZXJh
dG9yR1BSKSk7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0
b3JPcGVuPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBuZXh0VlJlZyA9IGJ5dGVjb2RlLm1fbmV4
dDsKLSAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPm5l
eHQuaW1wbCgpOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1tt
X2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSgKLSAgICAgICAg
Ynl0ZWNvZGUsCi0gICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9u
Ci0gICAgICAgIG5leHRWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgVHJ1c3RlZEltbVB0cihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCksIC8vIGFyZzIKLSAgICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRlcmF0b3JHUFIsIHBh
eWxvYWRJdGVyYXRvckdQUiksIC8vIGFyZzMKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNAot
ICAgIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0g
ICAgYXV0byBkb25lID0ganVtcCgpOwotCi0gICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRy
dXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKLQotICAg
IGRvbmUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvKiB0cnlGYXN0RnVuY3Rp
b24gPSAoWyZdICgpIHsKLSAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewot
ICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93
OwotICAgICAgICBjYXNlIFdpZGUxNjogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3Rfd2lk
ZTE2OwotICAgICAgICBjYXNlIFdpZGUzMjogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3Rf
d2lkZTMyOwotICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICB9Ci0gICAgfSkoKTsKLQotICAgIEpTVmFsdWVSZWdzIG5leHRSZWdzKHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIG5leHRS
ZWdzKTsKLSAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShuZXh0UmVncyk7
Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0
cnlGYXN0RnVuY3Rpb24pOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci0gICAgSnVtcCBmYXN0
Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsK
LQotICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0
YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7
Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9k
ZTo6R2VuZXJpYykpLCByZWdUMCk7Ci0gICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNv
ZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgp
ICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKLSAgICBjb21w
aWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKLSAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwotICAgIC8vIGNhbGwgcmVzdWx0
ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QxLCByZWdUMAotCi0gICAgR1BSUmVn
IHRhZ1ZhbHVlR1BSID0gcmVnVDE7Ci0gICAgR1BSUmVnIHBheWxvYWRWYWx1ZUdQUiA9IHJlZ1Qw
OwotICAgICAgICAKLSAgICBHUFJSZWcgdGFnRG9uZUdQUiA9IHJlZ1Q1OwotICAgIEdQUlJlZyBw
YXlsb2FkRG9uZUdQUiA9IHJlZ1Q0OwotCi0gICAgewotICAgICAgICBKU1ZhbHVlUmVncyBkb25l
UmVncyA9IEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxvYWREb25lR1BSKTsKLQotICAgICAg
ICBHUFJSZWcgdGFnSXRlclJlc3VsdEdQUiA9IHJlZ1QzOwotICAgICAgICBHUFJSZWcgcGF5bG9h
ZEl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKLSAgICAgICAgCi0gICAgICAgIC8vIGl0ZXJSZXN1bHRH
UFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93LgotICAgICAg
ICBtb3ZlKHJlZ1QxLCB0YWdJdGVyUmVzdWx0R1BSKTsKLSAgICAgICAgbW92ZShyZWdUMCwgcGF5
bG9hZEl0ZXJSZXN1bHRHUFIpOwotCi0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bCh0YWdJdGVyUmVzdWx0R1BSKTsKLQotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdz
ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVz
ZXJ2ZWRSZWdzLmFkZCh0YWdWYWx1ZUdQUik7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHBh
eWxvYWRWYWx1ZUdQUik7Ci0gICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywKLSAgICAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5l
SklULAotICAgICAgICAgICAgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICAg
ICAgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LAotICAgICAgICAgICAgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5k
b25lLmltcGwoKSksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0R1BSLCBw
YXlsb2FkSXRlclJlc3VsdEdQUiksCi0gICAgICAgICAgICBkb25lUmVncywKLSAgICAgICAgICAg
IEludmFsaWRHUFJSZWcsCi0gICAgICAgICAgICBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGRvbmVSZWdzKTsKLSAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVSZWdzKTsKLSAgICAg
ICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyh0YWdWYWx1ZUdQUiwgcGF5bG9hZFZh
bHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHRhZ0l0ZXJSZXN1bHRHUFIgPSByZWdUMTsKLSAgICAg
ICAgR1BSUmVnIHBheWxvYWRJdGVyUmVzdWx0R1BSID0gcmVnVDA7Ci0KLSAgICAgICAgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDY7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Q3OwotICAg
ICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNl
OwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwg
SlNWYWx1ZVJlZ3ModGFnRG9uZUdQUiwgcGF5bG9hZERvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwotCi0gICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywKLSAgICAg
ICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAotICAgICAgICAgICAgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLAotICAgICAgICAgICAgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLAotICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmlt
cGwoKSksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2Fk
SXRlclJlc3VsdEdQUiksCi0gICAgICAgICAgICByZXN1bHRSZWdzLAotICAgICAgICAgICAgSW52
YWxpZEdQUlJlZywKLSAgICAgICAgICAgIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0UmVncyk7Ci0KLSAg
ICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwotICAgIH0KLQotICAgIGZhc3RDYXNlLmxp
bmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0Pigp
OwotICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9k
b25lOwotICAgICAgICBHUFJSZWcgdGFnVmFsdWVHUFIgPSByZWdUMTsKLSAgICAgICAgR1BSUmVn
IHBheWxvYWRWYWx1ZUdQUiA9IHJlZ1QwOwotICAgICAgICAgICAgCi0gICAgICAgIEdQUlJlZyB0
YWdJdGVyUmVzdWx0R1BSID0gcmVnVDM7Ci0gICAgICAgIEdQUlJlZyBwYXlsb2FkSXRlclJlc3Vs
dEdQUiA9IHJlZ1QyOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIHRhZ0RvbmVHUFIgPSByZWdU
NTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWREb25lR1BSID0gcmVnVDQ7Ci0KLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAgICAg
ICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh0YWdJdGVyUmVzdWx0R1BSKSk7Ci0g
ICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocGF5bG9hZEl0ZXJSZXN1
bHRHUFIpKTsKLQotICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3Bl
cnR5TmFtZXMtPmRvbmUuaW1wbCgpOwotICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgICAgICAKLSAgICAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAgYnl0ZWNvZGUsCi0gICAgICAgICAgICBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgotICAgICAgICAgICAgZG9uZVZSZWcs
IC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLCAv
LyBhcmcyCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2Fk
SXRlclJlc3VsdEdQUiksIC8vIGFyZzMKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQK
LQotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBKU1ZhbHVlUmVncyh0YWdE
b25lR1BSLCBwYXlsb2FkRG9uZUdQUikpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIEpTVmFsdWVSZWdzKHRhZ1ZhbHVlR1BSLCBwYXlsb2FkVmFsdWVH
UFIpKTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7Ci0K
LSAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Ci0gICAgfQotCi0gICAgeyAgIAotICAg
ICAgICBHUFJSZWcgdGFnSXRlclJlc3VsdEdQUiA9IHJlZ1QxOwotICAgICAgICBHUFJSZWcgcGF5
bG9hZEl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKLQotICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFt
ZXMtPnZhbHVlLmltcGwoKTsKLSAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLQotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKLQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoCi0gICAgICAgICAgICBieXRlY29kZSwKLSAgICAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgLy8gb3BlcmF0aW9uCi0gICAgICAgICAgICB2YWx1ZVZSZWcsIC8vIHJlc3VsdAot
ICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIC8vIGFyZzEKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCi0gICAg
ICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQ
UiksIC8vIGFyZzMKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKLQotICAgICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotI2VuZGlm
IC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCmluZGV4IDY2YmM2
Nzc4Njg2MmMxMWM3MTdjODBlZWMzOGUxYmIyNTg5OTY5YmEuLjhlNGNlMDNmOGVlZWMzNDBiYjY2
NmY1Mjc5YTY4NzZkYzJjNjg4NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCkBA
IC0xNjIsMTIgKzE2Miw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhK
SVRUeXBlIGppdFR5cGUpCiAgICAgewotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGlmIChK
SVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwotI2VuZGlmCiAgICAgICAg
IGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5j
cHAKaW5kZXggMWYzNGMzZDFkY2ZmNTJlMDZhMjgyMTU3MTE4MmY5MmZmZmU4YzAyMS4uMzRmYmI2
YjU5MGZjNDNiOTY3MjViZGFlY2Y1NjU5YmM3YmZmMzBjMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbmxpbmVBY2Nlc3Mu
aCIKICNpbmNsdWRlICJKSVQuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTEyOCwx
NiArMTI5LDE0IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYgaml0KQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIG1faXNMZW5n
dGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5ndGhBY2Nlc3MoKSA6IElubGluZUFj
Y2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCi0KLSNpZiBVU0UoSlNWQUxVRTY0
KQotc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKEpJVCYgaml0LCBHUFJS
ZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHJlc3Vs
dCkKK3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhKSVQmIGppdCwgR1BS
UmVnIHN0dWJJbmZvR1BSLCBKU1ZhbHVlUmVncyBiYXNlSlNSLCBHUFJSZWcgc2NyYXRjaCwgSlNW
YWx1ZVJlZ3MgcmVzdWx0SlNSKQogewogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsK
IAotICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VKU1IucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoKTsKICAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIo
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKCkpKTsKICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0
Y2gpOwotICAgIGppdC5sb2FkUHJvcGVydHkoYmFzZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHQgfSk7CisgICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlSlNSLnBheWxvYWRHUFIoKSwgc2Ny
YXRjaCwgcmVzdWx0SlNSKTsKICAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKIAogICAg
IHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKQEAgLTE1MywxMSArMTUyLDEwIEBAIHZvaWQg
SklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYg
aml0LCB1bnNpZ25lZCBzdHViCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogCiAgICAgaml0
LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOwotICAgIGdlbmVyYXRlR2V0QnlJ
ZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhqaXQs
IHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IsIEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaEdQUiwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHRKU1IpOwogCiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CiB9Ci0jZW5kaWYKIAogSklU
R2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IoCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywKQEAgLTE3Nyw3ICsxNzUsNiBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogICAgIGdlbmVyYXRl
RmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwog
fQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKIHZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9y
OjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJ
bmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpOwpAQCAtMTg1LDExICsxODIsMTAgQEAgdm9pZCBKSVRHZXRC
eUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQm
IGppdCwgdW5zaWcKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAKICAgICBqaXQubG9hZENv
bnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7Ci0gICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5l
QWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
OjpiYXNlLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgZ2VuZXJhdGVHZXRCeUlk
SW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVn
aXN0ZXJzOjpiYXNlSlNSLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRj
aEdQUiwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdEpTUik7CiAKICAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKIH0KLSNlbmRpZgogCiBKSVRQdXRCeUlkR2VuZXJhdG9y
OjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBl
IGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCkBA
IC0yMDIsNyArMTk4LDYgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRv
cigKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0Y2gpOwogfQogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0
dWJJbmZvR1BSKQogewogICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2pp
dFR5cGUpKTsKQEAgLTIxMSwxNyArMjA2LDEyIEBAIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViCiAK
ICAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CiAKLSAgICBHUFJS
ZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBHUFJSZWcgc2Ny
YXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKLSAgICBHUFJSZWcgc2Ny
YXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gyOwotICAgIEdQUlJlZyB2
YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgdXNpbmcgbmFtZXNw
YWNlIEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczsKIAotICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZG9uZTsKLQotICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGF1dG8gc2tpcElubGlu
ZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOwotICAgIGppdC5sb2FkMzIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZC
eUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgaml0LnN0b3JlUHJvcGVydHkoSlNWYWx1
ZVJlZ3MgeyB2YWx1ZSB9LCBiYXNlLCBzY3JhdGNoLCBzY3JhdGNoMik7CisgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUpTUi5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGF1dG8gc2tpcElubGluZUFjY2Vz
cyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlk
U2VsZk9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgaml0LnN0b3JlUHJvcGVydHkodmFsdWVK
U1IsIGJhc2VKU1IucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CiAgICAg
YXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CiAKICAgICBza2lwSW5saW5lQWNjZXNzLmxpbmso
JmppdCk7CkBAIC0yMzAsNyArMjIwLDYgQEAgdm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWIKICAgICBm
aW5pc2hlZC5saW5rKCZqaXQpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwogfQotI2VuZGlm
CiAKIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYgaml0KQogewpAQCAtMzgzLDcgKzM3Miw2IEBAIHZvaWQgSklUSW5CeUlkR2VuZXJhdG9y
OjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiAgICAgZ2VuZXJhdGVGYXN0
Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAK
LSNpZiBVU0UoSlNWQUxVRTY0KQogdm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBz
dHViSW5mb0dQUikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9q
aXRUeXBlKSk7CkBAIC0zOTIsMTUgKzM4MCwxMyBAQCB2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSQog
CiAgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOwogCi0gICAgR1BS
UmVnIGJhc2UgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBHUFJSZWcgcmVz
dWx0ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICBHUFJSZWcgc2NyYXRj
aCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIHVzaW5nIG5hbWVzcGFj
ZSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczsKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
ZG9uZTsKIAotICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGF1dG8gc2tpcElubGluZUFj
Y2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOwotICAgIGppdC5ib3hCb29sZWFuKHRydWUs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VKU1IucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIo
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKCkpKTsKKyAgICBqaXQuYm94Qm9vbGVhbih0cnVlLCByZXN1bHRKU1IpOwogICAg
IGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOwogCiAgICAgc2tpcElubGluZUFjY2Vzcy5saW5r
KCZqaXQpOwpAQCAtNDA5LDcgKzM5NSw2IEBAIHZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJCiAgICAg
ZmluaXNoZWQubGluaygmaml0KTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKIH0KLSNlbmRp
ZgogCiBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2VuZXJhdG9yKAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCmluZGV4IDJmNjlmNjRlYzE2
MWFlOTA0M2U0ZGM4NjBjMzg0OTY0OTE5YzZhZGUuLmViZGU0MjRjYTZkNGFkNjdlYmY5NDk2MTc3
YjBlZmVjN2Y2OGRmMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmgKQEAgLTQ2LDExMiArNDYsMTk1IEBAIHN0cnVjdCBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90Owog
ZW51bSBjbGFzcyBKSVRUeXBlIDogdWludDhfdDsKIAorbmFtZXNwYWNlIEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnMgewogI2lmIFVTRShKU1ZBTFVFNjQpCi1zdHJ1Y3QgQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6
cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVn
VDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7
Ci19OwotCi1zdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Ci19OwotCi1zdHJ1Y3QgQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUklu
Zm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5m
bzo6cmVnVDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMjsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVn
VDM7Ci19OwotCi1zdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Ci0gICAgLy8gV2Ug
cmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJl
Z2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KLSAgICBzdGF0aWNfYXNzZXJ0KGJhc2Ug
PT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7Ci0gICAgc3RhdGljX2Fzc2VydChw
cm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7Ci0gICAgc3Rh
dGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsK
LSAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvKTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BS
SW5mbzo6cmVnVDM7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJ
bmZvOjpyZWdUNDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUklu
Zm86OnJlZ1Q1OwotfTsKLQotc3RydWN0IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpu
b25BcmdHUFIwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5m
bzo6bm9uQXJnR1BSMTsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOwotICAgIHN0YXRp
Y19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKLSAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5KTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJl
Z1QyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdU
MzsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnMgewotICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBkb250Q2xvYmJlclJlZ2lzdGVyID0gR1BSSW5mbzo6cmVnVDM7Ci19OwotCi1zdHJ1Y3Qg
QmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgewotICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB0
aGlzVmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lz
dGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c2NyYXRjaDsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgewotICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7Ci19OwotCi1zdHJ1Y3QgQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
ID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBH
UFJJbmZvOjpyZWdUMjsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9maWxlID0gR1BS
SW5mbzo6cmVnVDM7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUNDsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgc3Rh
dGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOwotICAg
IHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHkpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDI7Ci19OworY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdUMSB9
OworY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNSIHsgR1BSSW5mbzo6cmVnVDAgfTsK
K2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRKU1IgeyBwcm9wZXJ0eUpTUiB9OworY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OnJlZ1QzIH07Citjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2hHUFIgeyBHUFJJbmZvOjpyZWdUMiB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDMsIEdQUklu
Zm86OnJlZ1QyIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1IgeyBHUFJJbmZv
OjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRK
U1IgeyBwcm9wZXJ0eUpTUiB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUklu
Zm86OnJlZ1Q3IH07Citjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgeyBHUFJJbmZvOjpyZWdU
NiB9OwogI2VuZGlmCit9CisKK25hbWVzcGFjZSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgewor
I2lmIFVTRShKU1ZBTFVFNjQpCitjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUklu
Zm86OnJlZ1QxIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSIHsgR1BSSW5mbzo6
cmVnVDAgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMyB9
OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSIHsgR1BSSW5mbzo6cmVnVDIgfTsKKyNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCitjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUklu
Zm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdUMiB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3Vs
dEpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OnJlZ1Q3IH07Citjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgeyBHUFJJbmZvOjpyZWdUNiB9OworI2VuZGlmCit9CisKK25hbWVzcGFjZSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFs
dWVSZWdzIGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdz
IHByb3BlcnR5SlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBy
ZXN1bHRKU1IgeyBiYXNlSlNSIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BS
SW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJl
Z1QzIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJh
c2VKU1IgeyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKK2NvbnN0ZXhwciBKU1Zh
bHVlUmVncyBwcm9wZXJ0eUpTUiB7IEdQUkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdUMiB9Owor
Y29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IGJhc2VKU1IgfTsKK2NvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUNyB9OworY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoR1BSIHsgR1BSSW5mbzo6cmVnVDYgfTsKKyNlbmRpZgorfQorCisjaWYgVVNFKEpTVkFM
VUU2NCkKK25hbWVzcGFjZSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7Citz
dGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdUMCB9Owor
c3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiB7IEdQUkluZm86OnJlZ1Qx
IH07CitzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IEdQUkluZm86OnJl
Z1QwIH07CitzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEdQUkluZm86OnJl
Z1QyOworLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBhbmQgaW5p
dGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KK3N0YXRpY19hc3Nl
cnQoYmFzZUpTUiA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSKTsKK3N0YXRp
Y19hc3NlcnQocHJvcGVydHlKU1IgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHlKU1IpOworc3RhdGljX2Fzc2VydChyZXN1bHRKU1IgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0SlNSKTsKK3N0YXRpY19hc3NlcnQoc3R1YkluZm9HUFIgPT0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm9HUFIpOworCitzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMSA9IEdQUkluZm86OnJlZ1QzOworc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKK3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gz
ID0gR1BSSW5mbzo6cmVnVDU7Cit9CisjZW5kaWYKKworbmFtZXNwYWNlIEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVycyB7CisjaWYgVVNFKEpTVkFMVUU2NCkKK2NvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0IHsgR1BSSW5mbzo6cmVnVDAgfTsKK2NvbnN0ZXhwciBHUFJSZWcgdmFsdWUgeyBHUFJJbmZv
Ojphcmd1bWVudEdQUjIgfTsKK2NvbnN0ZXhwciBHUFJSZWcgcHJvdG8geyBHUFJJbmZvOjphcmd1
bWVudEdQUjMgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8geyBHUFJJbmZvOjphcmd1bWVu
dEdQUjEgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgeyBHUFJJbmZvOjpub25BcmdHUFIw
IH07Citjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyIHsgR1BSSW5mbzo6bm9uQXJnR1BSMSB9Owor
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSIHsgR1BS
SW5mbzo6cmVnVDAgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiAgeyBHUFJJbmZv
Ojphcmd1bWVudEdQUjMsIEdQUkluZm86OmFyZ3VtZW50R1BSMiB9OworY29uc3RleHByIEpTVmFs
dWVSZWdzIHByb3RvSlNSICB7IEdQUkluZm86OnJlZ1Q1LCBHUFJJbmZvOjpyZWdUNCB9OworY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OnJlZ1QxIH07Citjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gxR1BSIHsgR1BSSW5mbzo6cmVnVDYgfTsKK2NvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDJHUFIgeyBHUFJJbmZvOjpyZWdUNyB9Oworc3RhdGljX2Fzc2VydCghdmFsdWVKU1Iu
dXNlcyhyZXN1bHRHUFIpKTsKK3N0YXRpY19hc3NlcnQoIXZhbHVlSlNSLm92ZXJsYXBzKHByb3Rv
SlNSKSk7CitzdGF0aWNfYXNzZXJ0KCF2YWx1ZUpTUi51c2VzKHN0dWJJbmZvR1BSKSk7CitzdGF0
aWNfYXNzZXJ0KCF2YWx1ZUpTUi51c2VzKHNjcmF0Y2gxR1BSKSk7CitzdGF0aWNfYXNzZXJ0KCF2
YWx1ZUpTUi51c2VzKHNjcmF0Y2gyR1BSKSk7CisjZW5kaWYKK30KKworbmFtZXNwYWNlIEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVycyB7CisjaWYgVVNFKEpTVkFMVUU2NCkKK2NvbnN0ZXhwciBKU1Zh
bHVlUmVncyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDAgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBwcm9wZXJ0eUpTUiB7IEdQUkluZm86OnJlZ1QxIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
cmVzdWx0SlNSIHsgYmFzZUpTUiB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQ
UkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgeyBHUFJJbmZvOjpy
ZWdUMyB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBi
YXNlSlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MgcHJvcGVydHlKU1IgIHsgR1BSSW5mbzo6cmVnVDMsIEdQUkluZm86OnJlZ1QyIH07
Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSIHsgYmFzZUpTUiB9OworY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OnJlZ1Q3IH07Citjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2hHUFIgeyBHUFJJbmZvOjpyZWdUNiB9OworI2VuZGlmCitzdGF0aWNfYXNzZXJ0KGJh
c2VKU1IgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUik7CitzdGF0aWNfYXNz
ZXJ0KHByb3BlcnR5SlNSID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNS
KTsKK30KKworbmFtZXNwYWNlIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDAg
fTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRKU1IgeyBiYXNlSlNSIH07Citjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDEgfTsKK2NvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
ZG9udENsb2JiZXJKU1IgeyBHUFJJbmZvOjpyZWdUMyB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSIHsgYmFzZUpTUiB9
OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OnJlZ1QyIH07Citjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgeyBHUFJJbmZvOjpyZWdUMyB9OworY29uc3RleHByIEpT
VmFsdWVSZWdzIGRvbnRDbG9iYmVySlNSIHsgR1BSSW5mbzo6cmVnVDYsIEdQUkluZm86OnJlZ1Q3
IH07CisjZW5kaWYKK30KKworbmFtZXNwYWNlIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0
ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1Ig
eyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IGJh
c2VKU1IgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyB0aGlzSlNSIHsgR1BSSW5mbzo6cmVnVDEg
fTsKK2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMiB9OworY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoR1BSIHsgR1BSSW5mbzo6cmVnVDMgfTsKKyNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCitjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7
IGJhc2VKU1IgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyB0aGlzSlNSIHsgR1BSSW5mbzo6cmVn
VDMsIEdQUkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BS
SW5mbzo6cmVnVDcgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJl
Z1Q2IH07CisjZW5kaWYKK30KKworbmFtZXNwYWNlIEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsK
K2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlSlNSIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSIHsgQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHRKU1IgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgeyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvR1BSIH07Citjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2hHUFIgeyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2hHUFIg
fTsKK30KKworbmFtZXNwYWNlIEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDAg
fTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiB7IEdQUkluZm86OnJlZ1QxIH07Citj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDMgfTsKK2NvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gyR1BSIHsgR1BSSW5mbzo6cmVnVDQgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSIHsgR1BSSW5mbzo6cmVn
VDMsIEdQUkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BS
SW5mbzo6cmVnVDcgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJl
Z1Q2IH07Citjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyR1BSIHsgR1BSSW5mbzo6cmVnVDQgfTsK
KyNlbmRpZgorfQorCituYW1lc3BhY2UgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisjaWYg
VVNFKEpTVkFMVUU2NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsgR1BSSW5mbzo6
cmVnVDAgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiB7IEdQUkluZm86OnJl
Z1QxIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWVKU1IgeyBHUFJJbmZvOjpyZWdUMiB9
OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OnJlZ1Q0IH07Citjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgeyBHUFJJbmZvOjpyZWdUMyB9OworI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVn
VDEsIEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1Ig
eyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVn
cyB2YWx1ZUpTUiB7IEdQUkluZm86OnJlZ1Q2LCBHUFJJbmZvOjpyZWdUNyB9OworY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OnJlZ1Q0IH07Citjb25zdGV4cHIgR1BSUmVn
IHByb2ZpbGVHUFIgeyBHUFJJbmZvOjpyZWdUNSB9OworI2VuZGlmCit9CisKK25hbWVzcGFjZSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7CisjaWYgVVNFKEpTVkFMVUU2NCkKK2NvbnN0
ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDAgfTsKK2NvbnN0ZXhwciBK
U1ZhbHVlUmVncyBicmFuZEpTUiB7IEdQUkluZm86OnJlZ1QxIH07Citjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDIgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIGJyYW5kSlNSIHsgR1BSSW5mbzo6cmVn
VDMsIEdQUkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BS
SW5mbzo6cmVnVDcgfTsKKyNlbmRpZgorc3RhdGljX2Fzc2VydChiYXNlSlNSID09IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IpOworc3RhdGljX2Fzc2VydChicmFuZEpTUiA9PSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUik7Cit9CiAKIGNsYXNzIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgKaW5kZXggZThlNTc4ODg0MjE4OGU2ODU3NTc2YmRiNmVjMzI2YTlhZmY4Y2Q5
YS4uYTkxNDJkOGYwNTM4NWZlNmVlMmFkMTBjOWE0N2MyMGU4OWFhNWRiMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTM2NiwxOCArMzY2LDE4IEBAIGlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IEdQUlJlZyByZXN1bHRSCiAjZW5kaWYKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgot
aW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVy
SUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoraW5saW5lIHZvaWQgSklUOjplbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJk
aWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIEpTVmFsdWVSZWdzIGNlbGxKU1IsIFJlZ2lzdGVy
SUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAg
ICAgIGxvYWQzMihBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhjZWxsSlNSLnBheWxvYWRHUFIo
KSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIHN0
b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmls
ZSk7CiAgICAgfQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoraW5saW5l
IHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyBjZWxsSlNSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9m
TGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVj
dHVyZUlEKCksIGNlbGxKU1IsIHNjcmF0Y2hHUFIpOwogfQogCiBBTFdBWVNfSU5MSU5FIGludDMy
X3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKQEAgLTY0
Myw2ICs2NDMsMTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWcpKTsKIH0KIAorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKEpTVmFsdWVSZWdzIHJlZykKK3sKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChKU1ZhbHVlUmVncyBqc1JlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCit7
CisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGpzUmVnKTsKK30KKwogQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgaW50IHRhcmdldCkKIHsKICAgICBpZiAo
dGFyZ2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggMWM0
NGZkZWZkODVjOWFlOGJlMTg0Yzk4NGNmMWM3MGUzM2YzYTcwYy4uOGQ1NWMxYzZiZWMxNTVlMmZi
OTI5ZDA2ZTdjMDgxNzBjM2MwNTVkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCkBAIC0zNzEsMjYgKzM3MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgQVNTRVJUKGNhbGxGcmFtZVJlZ2lz
dGVyICE9IHJlZ1QxKTsKLSAgICBBU1NFUlQocmVnVDEgIT0gcmV0dXJuVmFsdWVHUFIpOwotICAg
IEFTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0KLSAgICAvLyBS
ZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwotCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgcmV0KCk7Ci0j
ZWxzZQotICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihvcF9yZXRfaGFuZGxl
ckdlbmVyYXRvcikuY29kZSgpKTsKLSNlbmRpZgotfQotCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0
X2hhbmRsZXJHZW5lcmF0b3IoVk0mKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGEyYmY2ZWIzZjc1NGViMWExN2NkYzc2MzM1MDc5Mzlk
MzE5YWJkMzYuLjU2YjJmY2JhMGU0OGFiNjc4MjI0ZGNjNzBjYWFmZTM1YzA4ZTA4NjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTE1Miwy
OCArMTUyLDM2IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJv
dG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgaW50byByZWdpc3RlcnMuCi0gICAg
Ly8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRo
aXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1p
dExvYWRQYXlsb2FkKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdExvYWRQYXlsb2FkKHByb3RvLCBy
ZWdUMSk7CisgICAgdXNpbmcgbmFtZXNwYWNlIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczsK
KworICAgIGVtaXRMb2FkUGF5bG9hZCh2YWx1ZSwgdmFsdWVKU1IucGF5bG9hZEdQUigpKTsKKyAg
ICBlbWl0TG9hZFBheWxvYWQocHJvdG8sIHByb3RvSlNSLnBheWxvYWRHUFIoKSk7CiAKICAgICAv
LyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRo
aXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlKTsKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocHJvdG8pOwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwg
Ly8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJv
dG8KLSAgICAgICAgSW52YWxpZEdQUlJlZywKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2Ny
YXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVlSlNS
LnBheWxvYWRHUFIoKSwKKyAgICAgICAgcHJvdG9KU1IucGF5bG9hZEdQUigpLAorICAgICAgICBz
dHViSW5mb0dQUiwKKyAgICAgICAgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gYWRkVG9Db25zdGFudFBvb2wo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwogICAg
IAotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CisgICAgZW1pdFN0b3JlQm9vbChkc3Qs
IHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKikKQEAgLTE5MiwxMiArMjAwLDMwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7
CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1tt
X2luc3RhbmNlT2ZJbmRleCsrXTsKLSAgICAKKwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdExvYWRUYWco
cHJvdG8sIHJlZ1QzKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMSkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQ
UiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRp
b24sIDE+KCk7CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZUpT
UjsKKyAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvSlNSOworICAg
IHN0YXRpY19hc3NlcnQodmFsdWVKU1IgPT0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJh
dGlvbiwgMj4oKSk7CisgICAgLy8gUHJvdG8gd2lsbCBiZSBwYXNzZWQgb24gc3RhY2ssIGp1c3Qg
bWFrZSBzdXJlIG5vIG92ZXJsYXAKKyAgICBzdGF0aWNfYXNzZXJ0KCFwcm90b0pTUi51c2VzKGds
b2JhbE9iamVjdEdQUikpOworICAgIHN0YXRpY19hc3NlcnQoIXByb3RvSlNSLnVzZXMoc3R1Yklu
Zm9HUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCF2YWx1ZUpTUi51c2VzKGdsb2JhbE9iamVjdEdQ
UikpOworICAgIHN0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoc3R1YkluZm9HUFIpKTsKKwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBl
bWl0TG9hZFRhZyh2YWx1ZSwgdmFsdWVKU1IudGFnR1BSKCkpOworICAgIGVtaXRMb2FkVGFnKHBy
b3RvLCBwcm90b0pTUi50YWdHUFIoKSk7CisgICAgY2FsbE9wZXJhdGlvbjxTbG93T3BlcmF0aW9u
PigKKyAgICAgICAgQWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwKKyAgICAgICAgZHN0LAorICAgICAgICBnbG9iYWxPYmplY3RH
UFIsIHN0dWJJbmZvR1BSLCB2YWx1ZUpTUiwgcHJvdG9KU1IpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGZmZGI5N2U0NjM5
Nzk0NTNkMDBkZTc2YWQwODczODA4NmEzZTg3YWQuLmQzNWQyNjhmN2MwZTdhYTYxOTU4ODU4YmZm
N2ZmMGI2ZGM2YTcyMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSA8d3RmL1N0cmluZ1By
aW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotI2lmIFVTRShKU1ZBTFVFNjQpCiAKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKQEAgLTUzLDI5ICs1MiwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnNjcmF0Y2g7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHVzaW5nIG5hbWVzcGFjZSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUpTUik7CiAKICAgICBpZiAoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQo
KSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAg
ICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOwotICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIp
OworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUpTUik7CisgICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUpTUiwgc2Ny
YXRjaEdQUik7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKICAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChzY3JhdGNoR1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3Bl
cmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUpTUiwgcHJvcGVydHlKU1IpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2Rl
LCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKLQotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UpOworICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VKU1IsIHNjcmF0Y2hH
UFIpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0
dWJJbmZvR1BSKTsKKyAgICAgICAgICAgIGJhc2VKU1IsIHByb3BlcnR5SlNSLCByZXN1bHRKU1Is
IHN0dWJJbmZvR1BSKTsKIAogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7
CkBAIC05MywxOSArODcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBhZGRTbG93Q2FzZSgpOwog
ICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRKU1IpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0SlNS
KTsKICAgICB9CiB9CiAKLSNpZiAhT1MoV0lORE9XUykKLXN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHZpYWJsZUFyZ3VtZW50R1BSNCA9IEdQUkluZm86OmFyZ3VtZW50R1BSNDsKLXN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNSA9IEdQUkluZm86OmFyZ3VtZW50R1BSNTsK
LSNlbHNlCi1zdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVudEdQUjQgPSBHUFJJ
bmZvOjpub25BcmdHUFIwOwotc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1lbnRH
UFI1ID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKLSNlbmRpZgotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNv
ZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKQEAgLTEyMSwxMyArMTA3LDI0IEBAIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nh
c2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVuCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgc3RhdGljX2Fzc2VydChhcmd1bWVudEdQUjMgIT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHkpOwotICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
YmFzZSwgYXJndW1lbnRHUFIzKTsKLSAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5LCB2aWFibGVBcmd1bWVudEdQUjQpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgYXJndW1lbnRHUFIyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZpYWJs
ZUFyZ3VtZW50R1BSNCk7CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJh
dGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBwcmVmZXJyZWRB
cmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBhcmczSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKTsKKyAg
ICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJnNEpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNs
b3dPcGVyYXRpb24sIDQ+KCk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlSlNSLm92ZXJsYXBzKGFyZzRKU1IpKTsKKyAgICBtb3ZlVmFsdWVSZWdz
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLCBhcmc0SlNSKTsKKyAgICBt
b3ZlVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IsIGFyZzNKU1Ip
OworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBzY3JhdGNoR1BSKTsKKyAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGU8U2xvd09wZXJhdGlvbj4oCisgICAgICAgIGJ5dGVjb2RlLAorICAg
ICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLAorICAgICAgICBkc3QsCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1
YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGFyZzNKU1IsIGFyZzRKU1IpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTQyLDggKzEzOSw4IEBAIHZvaWQgSklUOjpnZW5lcmF0ZUdl
dEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2Fz
ZUVuCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwotICAgIHN0YXRpY19hc3Nl
cnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7Ci0gICAgc3RhdGlj
X2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7Cisg
ICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxv
YWRHUFIoKSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCkgPT0gcmVnVDEpOwogCiAgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CkBAIC0xODEs
OCArMTc4LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNs
b3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXQKICAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQ
UiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxv
YWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHlKU1IucGF5bG9hZEdQUigpOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0yMDksMTkgKzIwNiwxNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cmVzdWx0KTsKKyAgICB1c2luZyBuYW1lc3BhY2UgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcHJvcGVydHlKU1IpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNS
LCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwK
LSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwgYmFzZUpTUiwgcHJvcGVydHlKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIpOwogCiAgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWU7CkBAIC0yMzQsOCArMjI4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0SlNS
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKQEAgLTI1MCwxMSArMjQ0LDIxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHks
IGFyZ3VtZW50R1BSMyk7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsK
KyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVm
ZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigp
OworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSID0gcHJlZmVycmVkQXJndW1lbnRK
U1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVy
dHlKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAzPigpOworCisgICAg
bG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5SlNSKTsKKyAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8U2xvd09wZXJhdGlvbj4oCisgICAgICAgIGJ5dGVjb2Rl
LAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICBkc3QsCisgICAgICAgIGdsb2JhbE9iamVjdEdQ
Uiwgc3R1YkluZm9HUFIsIGJhc2VKU1IsIHByb3BlcnR5SlNSKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTI2NCw4ICsyNjgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsg
Ly8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUi5w
YXlsb2FkR1BSKCk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBheWxvYWRHUFIoKTsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMzI0LDE3ICszMjgs
MTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5k
OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHVz
aW5nIG5hbWVzcGFjZSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihicmFuZCwgYnJhbmRHUFIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VKU1Ip
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kSlNSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRl
QnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisgICAgICAgIGJhc2VKU1IsIGJy
YW5kSlNSLCBzdHViSW5mb0dQUik7CiAKICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CkBAIC0zNjUsMTEgKzM2NywyMCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0
ZUJyYW5kPigpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50
R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1
bWVudEdQUjMpOwotICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBk
ZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0
aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJyZWRB
cmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBiYXNlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKyAg
ICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYnJhbmRKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxT
bG93T3BlcmF0aW9uLCAzPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RH
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJh
bmQsIGJyYW5kSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAgICAg
ICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNlSlNS
LCBicmFuZEpTUik7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNzksOCAr
MzkwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YnJhbmRKU1IucGF5bG9hZEdQUigpOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0
eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0zOTksMTggKzQxMCwxNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNl
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICB1c2luZyBuYW1lc3BhY2Ug
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJy
YW5kR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VKU1IpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kSlNSKTsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NH
ZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYmFzZUpTUiwgYnJhbmRKU1IsIHN0
dWJJbmZvR1BSKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOwpAQCAtNDM1LDExICs0NDQsMTkgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBl
KG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICB1c2lu
ZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRp
bWl6ZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRB
cmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xv
d09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYnJhbmRKU1IgPSBw
cmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAzPigpOworCisgICAgbG9hZEdsb2Jh
bE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGJyYW5kSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uPFNs
b3dPcGVyYXRpb24+KAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICBnbG9iYWxPYmplY3RHUFIs
IHN0dWJJbmZvR1BSLCBiYXNlSlNSLCBicmFuZEpTUik7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC00NDksOCArNDY2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwKICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFy
ZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2VK
U1IucGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmRKU1IucGF5bG9hZEdQUigpOwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAg
c3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC00NjMsMTEg
KzQ4MCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGVtaXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsRGlyZWN0PihjdXJyZW50SW5zdHJ1Y3Rp
b24pOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKQEAgLTQ3Niwy
MyArNDg4LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmls
ZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgdXNpbmcgbmFtZXNwYWNlIEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBwcm9wZXJ0eUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
dmFsdWVKU1IpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQ
UiwgcHJvZmlsZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1Is
IGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFz
ZUpTUiwgcHJvZmlsZUdQUik7CiAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIp
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmls
ZUdQUiwgc3R1YkluZm9HUFIpOworICAgICAgICBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgdmFsdWVK
U1IsIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChwcm9wZXJ0eSkpCiAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIg
PSB0cnVlOwpAQCAtNTE3LDYgKzUyNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAordGVtcGxhdGUgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOworCit2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGVtaXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsRGlyZWN0
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOworfQorCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CkBAIC01NDQs
MTcgKzU1OSwyNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8v
IFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4K
LSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIGFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgYXJndW1lbnRHUFIzKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgdXNpbmcgU2xvd09wZXJh
dGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xv
d09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpT
VmFsdWVSZWdzIHByb3BlcnR5SlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlv
biwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWVKU1IgPSBwcmVmZXJyZWRB
cmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAzPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCA0PigpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dP
cGVyYXRpb24sIDU+KCk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUpTUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVKU1IpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGlmIChpc0RpcmVj
dCkKLSAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHZpYWJsZUFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWxEaXJlY3Q+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKICAgICBlbHNlCi0gICAgICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9w
UHV0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCB2aWFibGVBcmd1bWVu
dEdQUjUpOwotICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSk+KEFkZHJlc3ModmlhYmxlQXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3VtZW50R1BSNCwgdmlhYmxlQXJn
dW1lbnRHUFI1KTsKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbDo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGNhbGxPcGVyYXRpb248U2xv
d09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwg
YmFzZUpTUiwgcHJvcGVydHlKU1IsIHZhbHVlSlNSLCBzdHViSW5mb0dQUiwgcHJvZmlsZUdQUik7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC01OTUsMTQgKzYxOSwxNCBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfYnlf
dmFsX3ByZXBhcmVDYWxsR2VuZXJhdAogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5SlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWVKU1IucGF5bG9hZEdQUigpOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnBy
b2ZpbGVHUFI7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1
OwogICAgIHsKLSAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2Zp
bGUpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkKGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1
ZUdQUiwgcHJvZmlsZUdQUik7CiAgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNCkp
OwogICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsKICAgICB9CkBAIC02MzIs
MjAgKzY1NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICB1c2luZyBuYW1lc3BhY2UgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VKU1IpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5SlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUpT
Uik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UpOwogCiAgICAgSklU
UHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJl
Zywgc3R1YkluZm9HUFIpOworICAgICAgICBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgdmFsdWVKU1Is
IEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOwpAQCAtNjc4LDEyICs2
OTksMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQ
cml2YXRlTmFtZT4oKTsKIAotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50
R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1
bWVudEdQUjMpOwotICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgdmlhYmxlQXJndW1lbnRHUFI0KTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBl
KG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpPihBZGRyZXNzKHZp
YWJsZUFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzLCB2aWFibGVBcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIHVz
aW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZh
dGVGaWVsZE9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9
IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHBy
IEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9u
LCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiA9IHByZWZlcnJl
ZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVS
ZWdzIHZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8
U2xvd09wZXJhdGlvbiwgND4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUpT
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBwcm9w
ZXJ0eUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2
YWx1ZUpTUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgY2FsbE9wZXJhdGlvbjxTbG93T3BlcmF0aW9uPigK
KyAgICAgICAgQWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBiYXNlSlNSLCBwcm9w
ZXJ0eUpTUiwgdmFsdWVKU1IsIHN0dWJJbmZvR1BSLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTcxNiw5ICs3NDYsOSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsRwogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHlKU1IucGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZUpTUi5wYXlsb2FkR1BSKCk7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNzQyLDYgKzc3Miw4IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwpAQCAt
Nzk1LDYgKzgyNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVn
VDIpOwogfQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwpAQCAtODAyLDE3ICs4MzYsMTQgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIHVzaW5nIG5hbWVzcGFjZSBCYXNlbGluZURlbEJ5SWRS
ZWdpc3RlcnM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VKU1IpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigK
ICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBiYXNlSlNSLCByZXN1
bHRKU1IsIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ7CkBAIC04MjUsOCArODU2
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEpTUi5wYXlsb2FkR1BSKCksIHJlc3VsdEpTUik7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEpTUik7CiAKICAgICAvLyBJ
QyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNl
IGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5k
IG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAt
ODQ5LDEwICs4ODAsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRl
QnlJZE9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+
KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVu
dEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxP
YmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUpTUik7CisgICAgY2FsbE9wZXJhdGlvbjxTbG93T3BlcmF0aW9uPigKKyAgICAgICAgQWRk
cmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgYmFzZUpTUiwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC04NzYsOCArOTE1LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAg
ICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOworICAgIHVzaW5nIEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNSOwor
ICAgIHN0YXRpY19hc3NlcnQocmVzdWx0SlNSLnBheWxvYWRHUFIoKSA9PSBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisKKyAgICBib3hCb29sZWFuKHJlc3VsdEpTUi5wYXlsb2FkR1BSKCksIHJl
c3VsdEpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEpTUik7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCkBA
IC05MjUsMTkgKzk2NywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICB1c2luZyBuYW1lc3BhY2UgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VKU1IpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlSlNSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUpTUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5SlNSLCBw
cm9wZXJ0eSk7CiAKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisgICAgICAgIGJhc2VKU1IsIHByb3BlcnR5
SlNSLCByZXN1bHRKU1IsIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKIAogICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
ICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOwpAQCAt
OTUwLDggKzk4OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVs
QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEpTUi5wYXlsb2FkR1BSKCks
IHJlc3VsdEpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEpTUik7
CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2Vx
dWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMg
Y2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBp
cyBjZWxsLgpAQCAtOTc0LDExICsxMDEzLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7Ci0g
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAgICBjYWxs
T3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpPihBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgdXNpbmcg
U2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRH
UFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRp
b24sIDI+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNSID0gcHJlZmVy
cmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKTsKKworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VKU1IpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5SlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAgICAg
ICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNlSlNS
LCBwcm9wZXJ0eUpTUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMiw4ICsxMDQ5LDExIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQ
UiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIHVzaW5nIEJhc2VsaW5lRGVs
QnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNSOworICAgIHN0YXRpY19hc3NlcnQocmVzdWx0SlNSLnBh
eWxvYWRHUFIoKSA9PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICBib3hCb29sZWFu
KHJlc3VsdEpTUi5wYXlsb2FkR1BSKCksIHJlc3VsdEpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlc3VsdEpTUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCkBAIC0xMDUxLDE2ICsxMTAxLDE0IEBAIHZvaWQgSklU
OjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdCk7CisgICAgdXNpbmcgbmFtZXNwYWNlIEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUpTUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdz
LCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBiYXNlSlNSLCByZXN1bHRKU1IsIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CkBAIC0xMDczLDggKzExMjEsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJl
Z3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJlc3VsdEpTUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMDkwLDEwICsxMTM4
LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKLSAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24g
PSBkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlv
biwgMD4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJn
dW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
YmFzZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGNhbGxP
cGVyYXRpb248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIHJlc3Vs
dFZSZWcsCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIGJhc2VKU1IsCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTAzLDcgKzExNjAsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0bwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2Vy
dChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIApAQCAtMTEyNiwxNiAr
MTE4MywxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHVzaW5nIG5hbWVzcGFj
ZSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCBiYXNlR1BSKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJh
c2VKU1IpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlVlJl
Zyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWRE
aXJlY3QpOworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgYmFzZUpTUiwg
cmVzdWx0SlNSLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAKICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
RGlyZWN0OwpAQCAtMTE0OCw4ICsxMjAzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJlc3Vs
dEpTUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMTY1LDEwICsxMjIwLDIwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwot
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24g
PSBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJh
dGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVk
QXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MgYmFzZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxTbG93T3BlcmF0aW9uPigKKyAgICAgICAgYnl0ZWNvZGUs
CisgICAgICAgIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICByZXN1bHRWUmVnLAorICAgICAgICBnbG9iYWxP
YmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNlSlNSLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtMTE3OCw3ICsxMjQzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZUpTUi5wYXlsb2FkR1BSKCk7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogCkBAIC0xMjAyLDI0ICsxMjY3LDIxIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdCk7CisgICAgdXNpbmcgbmFtZXNwYWNlIEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUpTUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlk
ZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKICAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0
YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZz
ZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2Rl
ID0gYnJhbmNoMzIoTm90RXF1YWwsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihH
ZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUpTUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5v
dEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBz
dHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLCBiYXNlSlNSLCByZXN1bHRKU1IsIHN0dWJJbmZvR1BSLCBBY2Nlc3NU
eXBlOjpHZXRCeUlkKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CkBAIC0xMjMzLDggKzEyOTUsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlc3VsdEpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
LCByZXN1bHRKU1IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMjUwLDEwICsxMzEyLDIwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwot
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8
U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiA9
IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxTbG93T3BlcmF0aW9uPigKKyAgICAgICAgYnl0ZWNvZGUsCisgICAgICAgIEFk
ZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksCisgICAgICAgIHJlc3VsdFZSZWcsCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1
YkluZm9HUFIsIGJhc2VKU1IsCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYzLDcg
KzEzMzUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRH
UFIoKTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAKQEAgLTEyODcsMTkgKzEzNTksMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1
YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
dGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpzdHViSW5mbzsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgdXNp
bmcgbmFtZXNwYWNlIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VKU1IpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNK
U1IpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlVlJlZyk7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNKU1IsIHRoaXNWUmVnKTsKIAog
ICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVn
cywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQ
Uik7CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRKU1IsIGJh
c2VKU1IsIHRoaXNKU1IsIHN0dWJJbmZvR1BSKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKQEAgLTEzMTMsMTAg
KzEzODIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRK
U1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmVzdWx0SlNSKTsK
IH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CkBAIC0xMzU0LDYgKzE0MjUsOCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0bwogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwpAQCAtMTM2NywxMSArMTQ0MCwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1l
bnRHUFIzKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICB1c2luZyBTbG93
T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRH
UFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRp
b24sIDI+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHRoaXNKU1IgPSBwcmVmZXJyZWRB
cmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAzPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdGhpc1ZhbHVlLCB0aGlzSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8U2xvd09wZXJhdGlvbj4oCisgICAgICAgIGJ5dGVjb2RlLAorICAgICAgICBBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwK
KyAgICAgICAgcmVzdWx0VlJlZywKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQ
UiwgYmFzZUpTUiwgdGhpc0pTUiwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzODEs
OCArMTQ2NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNl
LgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2VKU1IucGF5
bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzSlNSLnBheWxvYWRHUFIoKTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0
aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CkBAIC0xMzk5LDYgKzE0ODMsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQogewpA
QCAtMTQzOCw2ICsxNTI0LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2EKIH0KICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKQEAg
LTE0NTAsMTggKzE1MzgsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUg
YXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbics
IGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBv
ZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7
Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
czo6dmFsdWU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0
QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIHVzaW5nIG5hbWVzcGFj
ZSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlVlJlZywgdmFsdWVKU1IpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlSlNSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIp
LCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBi
YXNlSlNSLCB2YWx1ZUpTUiwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVj
b2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGly
ZWN0KTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKQEAgLTE0OTYsMTEgKzE1ODIsMjAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2wKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21f
cHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOwotICAgIGNh
bGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKT4oQWRk
cmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50
R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICB1c2lu
ZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXpl
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29u
c3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09w
ZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiA9IHByZWZl
cnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGNhbGxPcGVyYXRpb248U2xvd09w
ZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1
YkluZm9HUFIsIHZhbHVlSlNSLCBiYXNlSlNSLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTUxMCw4ICsxNjA1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFk
eSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6dmFsdWU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2VK
U1IucGF5bG9hZEdQUigpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1
bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAh
aXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BSMSk7
CkBAIC0xNTcxLDE2ICsxNjY2LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHVzaW5nIG5hbWVzcGFjZSBCYXNl
bGluZUluQnlJZFJlZ2lzdGVyczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VHUFIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUpTUik7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2VWUmVnKTsKIAog
ICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCksIGJhc2VKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIp
OwogCiAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
SW5CeUlkOwpAQCAtMTU5Myw3ICsxNjg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXN1bHRKU1IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE2MDksMTAgKzE3MDIsMTkg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG8KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOwotICAgIGNhbGxPcGVyYXRpb248ZGVj
bHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5
cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFs
T2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xv
d09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGNhbGxPcGVyYXRpb248U2xv
d09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIHJlc3VsdFZSZWcsCisgICAg
ICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIGJhc2VKU1IsCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xNjIyLDcgKzE3MjQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
bwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lz
dGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCkBAIC0xNjQ3LDE5ICsxNzQ5LDE2IEBAIHZvaWQgSklU
OjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7Ci0gICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICB1c2luZyBuYW1lc3BhY2Ug
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwg
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VKU1IpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5SlNSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpT
UiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBi
YXNlSlNSLCBzY3JhdGNoR1BSKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAogICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworICAgICAgICBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwg
cmVzdWx0SlNSLCBzdHViSW5mb0dQUik7CiAKICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOwpAQCAtMTY3Miw3ICsxNzcxLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRKU1IpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNjg3
LDEyICsxNzg2LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCB2aWFibGVBcmd1bWVudEdQUjQpOwotICAg
IGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKT4oQWRkcmVz
cyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzLCB2aWFibGVBcmd1bWVudEdQUjQpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBk
ZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4o
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRH
UFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIg
PSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIGNvbnN0ZXhw
ciBKU1ZhbHVlUmVncyBiYXNlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlv
biwgMz4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1IgPSBwcmVmZXJy
ZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCA0PigpOworCisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSwgcHJvcGVydHlKU1IpOworICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlv
bj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGRzdCwKKyAgICAgICAgZ2xvYmFsT2JqZWN0
R1BSLCBzdHViSW5mb0dQUiwgcHJvZmlsZUdQUiwgYmFzZUpTUiwgcHJvcGVydHlKU1IpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTcwMyw4ICsxODEyLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2wKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRH
UFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5SlNSLnBheWxvYWRHUFIoKTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIg
PT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTcyNSwxOCArMTgzNCwxNSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbAogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQs
IEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICB1c2luZyBuYW1lc3BhY2UgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcHJvcGVydHlHUFIpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VKU1IpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUpTUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VKU1IsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCiAg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUik7CisgICAgICAgIGJhc2VKU1IsIHByb3BlcnR5SlNSLCByZXN1bHRKU1IsIHN0
dWJJbmZvR1BSKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IHR5
cGU7CkBAIC0xNzQ5LDcgKzE4NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpcwogICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0SlNSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRIYXNQ
cml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlIHR5cGUpCkBAIC0xNzYyLDExICsxODY4
LDIwIEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJh
dGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIHVzaW5nIFNs
b3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0
aW9uLCAyPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiA9IHByZWZl
cnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUpTUik7CisgICAgY2FsbE9wZXJhdGlvbjxTbG93T3BlcmF0aW9uPigKKyAgICAg
ICAgQWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwKKyAgICAgICAgZHN0LAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJ
bmZvR1BSLCBiYXNlSlNSLCBwcm9wZXJ0eUpTUik7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC0xNzc2LDggKzE4OTEsOCBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUgogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5SlNSLnBheWxvYWRHUFIoKTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlP
ckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE4MjEsNiArMTkzNiw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWCiAgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0
LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVCcmFuZCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6ZW1pdFJlc29s
dmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CkBAIC0yODkz
LDggKzMwMTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJh
c2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKLXRlbXBsYXRlIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLQogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKTsKQEAgLTMwMDQsMTAgKzMxMTks
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5
VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdEpT
Ui5wYXlsb2FkR1BSKCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVF
bnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHlKU1IucGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm9HUFI7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gyID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaDM7CkBAIC0zMDU2LDcgKzMxNzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAK
ICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKKyAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgYmFzZUdQUiB9LCBzY3Jh
dGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IDkxZmFhNGU1MmZm
YjEyYTNmNmI1MmU3YjkzYTU1MGRhY2UyZjRjZDguLmM2MGI2MzJlOTRkMWRlZjJmNDIzMGYwYTg0
YmU4MzZjZmQ3MzUyYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtMTE4LDc3MiArMTE4LDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0K
LSAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0K
LSAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQ
UigpKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFn
R1BSKCkpOwotICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVk
Q29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVu
dCksCi0gICAgICAgIGJhc2VSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGJveEJv
b2xlYW4ocmVnVDAsIHJlc3VsdFJlZ3MpOwotCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlc3VsdFJlZ3MpOwotCi0gICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgotICAgIC8vIFdlIHNob3VsZCBl
bWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJy
aWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KLSAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4K
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0g
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVs
QnlWYWw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0KLSAgICBKU1ZhbHVlUmVncyBi
YXNlUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcHJv
cGVydHlSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLQotICAgIGVtaXRMb2FkMihi
YXNlLCBiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpLCBwcm9wZXJ0eSwg
cHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKTsKLQotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eVJlZ3MudGFn
R1BSKCkpOwotCi0gICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2Zp
bGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywg
cmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgcmVnVDQpOwotCi0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
bV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCByZXN1bHRS
ZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7Ci0KLSAg
ICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ug
c2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCi0gICAgLy8gSUMgY2FuIHdy
aXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxs
LgotICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGlu
ZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgotICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJh
c2UsIFNob3VsZEZpbHRlckJhc2UpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFs
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotCi0gICAgSklURGVsQnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKLQotICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBlbWl0TG9hZDIoYmFzZSwgYmFzZVJlZ3Mu
dGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSwgcHJvcGVydHksIHByb3BlcnR5UmVncy50
YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MoYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSksIEpTVmFs
dWVSZWdzKHByb3BlcnR5UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSks
IFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dFJlZ3MpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAg
SlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotCi0gICAg
SklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsK
LQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgZW1pdExvYWQoYmFz
ZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlUmVncywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7Ci0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgIGJveEJvb2xlYW4ocmVn
VDAsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRS
ZWdzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0K
LSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1Qy
KTsKLQotICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Nl
ZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRl
bnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDEpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIHJl
Z1QwLCByZWdUNCk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLSAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCByZWdUMCwgcmVn
VDQpOwotCi0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
ICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMiksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwotICAgICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAg
ICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7Ci0KLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsK
LSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZh
bD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxz
W21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotCi0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
cHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwot
ICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7Ci0gICAgYXV0byBiYXNlR1BSID0gSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJl
Z1QwKTsKLSAgICBhdXRvIHByb3BlcnR5R1BSID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
LQotICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVn
VDIpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLQot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwot
Ci0gICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
LAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGJhc2VH
UFIsIHByb3BlcnR5R1BSLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJl
Z3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLX0KLQotCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAg
IEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFs
SW5kZXhdOwotICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwotCi0gICAgYXV0byBiYXNlR1BSID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKLSAgICBhdXRvIHByb3BlcnR5R1BSID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUik7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
LX0KLQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7Ci0KLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwg
cmVnVDMsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKLQotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0KLSAgICBKSVRQdXRC
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJl
Z1Q0KSwgSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZyk7Ci0gICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fcHV0QnlWYWxz
LmFwcGVuZChnZW4pOwotCi0gICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgotICAgIC8vIEZJWE1FOiBVc2UgVW5j
b25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2Ug
Y29kZSBzaXplLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwot
fQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0
ZWNvZGUubV9wdXRLaW5kOwotCi0gICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0
QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIEpTVmFsdWVSZWdz
IGJhc2VSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzKHJl
Z1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCk7Ci0K
LSAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5
VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZh
dGVGaWVsZE9wdGltaXplOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFz
ZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZElt
bVB0cihudWxscHRyKSk7Ci0KLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBi
cmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBicmFuZFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBl
bWl0TG9hZChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKTsK
LSAgICBlbWl0TG9hZChicmFuZCwgYnJhbmRSZWdzLnRhZ0dQUigpLCBicmFuZFJlZ3MucGF5bG9h
ZEdQUigpKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVn
cy50YWdHUFIoKSk7Ci0KLSAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBiYXNlUmVncywgYnJhbmRSZWdzLCBJbnZhbGlkR1BSUmVnKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwot
Ci0gICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVl
bmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgotICAgIC8vIElDIGNh
biB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMg
Y2VsbC4KLSAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFz
ZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmll
cihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Nl
dF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyhyZWdUMSwgcmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIGJyYW5kUmVncyhyZWdUMywgcmVnVDIpOwotCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4
XTsKLSAgICArK21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXg7Ci0gICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
ZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BDaGVja1ByaXZhdGVCcmFuZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29k
ZS5tX2JyYW5kOwotICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAg
SlNWYWx1ZVJlZ3MgYnJhbmRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgZW1pdExvYWQoYmFzZSwg
YmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgZW1pdExvYWQo
YnJhbmQsIGJyYW5kUmVncy50YWdHUFIoKSwgYnJhbmRSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwot
Ci0gICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVj
a1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBiYXNlUmVncywgYnJhbmRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgSlNWYWx1ZVJlZ3Mg
YmFzZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBicmFuZFJlZ3MocmVnVDMs
IHJlZ1QyKTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBKSVRQcml2YXRl
QnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2
YXRlQnJhbmRBY2Nlc3NJbmRleF07Ci0gICAgKyttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4Owot
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0
cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlUmVncywgYnJhbmRSZWdzKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfcHV0
X2J5X3ZhbDxPcFB1dEJ5VmFsRGlyZWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
Ci0KLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJl
Z1QyKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKLQotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCByZWdUMCwgcmVnVDYpOwotICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpLCByZWdUNik7Ci0KLSAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgcmVnVDYsIEludmFsaWRHUFJSZWcpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwotCi0gICAgLy8gSUMgY2Fu
IHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBj
ZWxsLgotICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNl
bGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwotICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKLSAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2Rl
OjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwotCi0gICAg
YXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKLSAgICAgICAgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgICAg
ICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgICAgIGVjbWFNb2RlID0gSklUOjplY21h
TW9kZShieXRlY29kZSk7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7Ci0gICAgfTsKLQotICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwotICAgIGVsc2UKLSAg
ICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwotCi0gICAg
SklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsr
XTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKLQotICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMg
Y2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCi0gICAgLy8gU3dhcHBp
bmcgc2hvdWxkbid0IGhhcHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMuCi0gICAgZW1pdExvYWQyKGJh
c2UsIHJlZ1QyLCByZWdUMSwgcHJvcGVydHksIHJlZ1QzLCByZWdUMCk7Ci0gICAgZW1pdExvYWQo
dmFsdWUsIHJlZ1Q1LCByZWdUNCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlz
RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkg
OiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdU
MSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCks
IGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsKLQotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQot
ICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9m
aWxlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwg
cmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0U3RvcmUoZHN0
LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKLQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZv
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7Ci0gICAgCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKLX0KLQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0K
LSAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJv
ZmlsZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCks
IHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0U3RvcmUoZHN0
LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKLQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0
aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi0KLXZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwotICAgIAotICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLQotICAgIGlmICgqaWRl
bnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewotICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNl
dE9mTW9kZSgpLCByZWdUMik7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJh
bmNoMzIoTm90RXF1YWwsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlk
TW9kZTo6QXJyYXlMZW5ndGgpKSwgcmVnVDIpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1l
dGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIHJlZ1QwLCByZWdUMik7Ci0gICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5r
KHRoaXMpOwotICAgIH0KLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3Ms
IEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQ
UigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5m
bygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOwotICAgIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVn
ID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwot
ICAgIAotICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExvYWQodGhp
c1ZSZWcsIHJlZ1Q0LCByZWdUMyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc1ZSZWcsIHJl
Z1Q0KTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwotCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJs
b2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0U3RvcmUoZHN0LCBy
ZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwotCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKLSAgICAKLSAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2Vu
LnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0
LCByZWdUMyksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRo
ZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIs
Ci0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50
byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCi0gICAgLy8g
c3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBk
aXN0YW5jZSBmcm9tIHRoaXMuCi0gICAgCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotICAgIAotICAgIGVtaXRMb2FkMihiYXNlLCByZWdU
MSwgcmVnVDAsIHZhbHVlLCByZWdUMywgcmVnVDIpOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0KLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3By
b2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBJbnZhbGlkR1BSUmVnLAotICAg
ICAgICByZWdUMSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpLCBkaXJlY3QgPyBQdXRLaW5k
OjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIAotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBT
dHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgotICAgIC8v
IEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3Rp
dmVseSB0byByZWR1Y2UgY29kZSBzaXplLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3Vs
ZEZpbHRlckJhc2UpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotCi0gICAgLy8g
SklUUHV0QnlJZEdlbmVyYXRvciBvbmx5IHByZXNlcnZlIHRoZSB2YWx1ZSBhbmQgdGhlIGJhc2Un
cyBwYXlsb2FkLCB3ZSBoYXZlIHRvIHJlbG9hZCB0aGUgdGFnLgotICAgIGVtaXRMb2FkVGFnKGJh
c2UsIHJlZ1QxKTsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNb
bV9wdXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigK
LSAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwotICAgIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRMb2FkKGJhc2UsIHJl
Z1QxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1Qx
KTsKLQotICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSW52YWxpZEdQUlJlZyk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9pbkJ5SWRzLmFwcGVuZChn
ZW4pOwotCi0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgSklUSW5C
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKLQotICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
VmFsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotCi0gICAgZW1pdExvYWQyKGJhc2Us
IHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIHJlZ1QwLCByZWdUNCk7Ci0KLSAgICBKSVRJbkJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFs
aWRHUFJSZWcpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7Ci0K
LSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeVZhbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7Ci0KLSAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZh
bEluZGV4KytdOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOwotCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJy
YW5kLCBBY2Nlc3NUeXBlIHR5cGUpCi17Ci0gICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdU
MCwgcHJvcGVydHlPckJyYW5kLCByZWdUMywgcmVnVDIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0KLSAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0
eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0U3RvcmUoZHN0LCByZWdU
MSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdp
c3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHks
IEFjY2Vzc1R5cGUgdHlwZSkKLXsKLSAgICAvLyBGSVhNRTogNjQtYml0IHNlZW1zIHRvIGFsc28g
aWdub3JlIGJhc2UvcHJvcGVydHkuCi0gICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwotICAg
IFVOVVNFRF9QQVJBTShiYXNlKTsKLSAgICBVTlVTRURfUEFSQU0ocHJvcGVydHkpOwotCi0gICAg
SklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsK
LSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlv
bkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOwotCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZU5hbWU+KCk7Ci0gICAgZW1pdEhh
c1ByaXZhdGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRl
Y29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRl
X2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7
Ci0gICAgZW1pdEhhc1ByaXZhdGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0
ZWNvZGUubV9icmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5kPigpOwotICAgIGVtaXRIYXNQcml2
YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5k
LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwotfQotCiB2b2lkIEpJVDo6ZW1pdFJlc29s
dmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CkBAIC0xMzcz
LDggKzYwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFz
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAotdGVtcGxhdGUgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwotCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X3Byb3BlcnR5X2VudW1lcmF0
b3IpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442137</attachid>
            <date>2021-10-22 02:32:22 -0700</date>
            <delta_ts>2021-10-25 03:32:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232079-20211022103221.patch</filename>
            <type>text/plain</type>
            <size>229480</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MDc3ZTgyMzNhNWMwNjRiMGI1NDI1ODgyMjJkZjViMTZjM2JiZTQzLi5lMTM0ZTkwMGI0NmI4MzM5
MjcxMGJlYjY4ZjkzNjEyNGMwYTY3NmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjYgQEAKKzIwMjEtMTAtMjIgIEdlemEgTG9yZSAgPGdlemFsb3JlQGdtYWlsLmNvbT4K
KworICAgICAgICBbSlNDXVszMmJpdF0gVXNlIERhdGFJQyBpbiBCYXNlbGluZSBKSVQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjA3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcG9y
dHMgdGhlIEpTVkFMVUUzMl82NCBiYXNlbGluZSBKSVQgdG8gdXNlIERhdGFJQ3MuCisKKyAgICAg
ICAgVGhlIG1ham9yaXR5IG9mIHRoZSBpbnZvbHZlZCBvcGNvZGVzIChhbGwgYnV0IG9uZSkgY291
bGQgYmUgZWFzaWx5CisgICAgICAgIG1vZGlmaWVkIHRvIHVzZSBhIGNvbW1vbiBpbXBsZW1lbnRh
dGlvbiBiZXR3ZWVuIEpTVkFMVUU2NCBhbmQKKyAgICAgICAgSlNWQUxVRTMyXzY0IHBsYXRmb3Jt
cyBieSBhYnN0cmFjdGluZyBvdmVyIG1hY2hpbmUgcmVnaXN0ZXJzIGhvbGRpbmcgYQorICAgICAg
ICBKU1ZhbHVlIHVzaW5nIEpTVmFsdWVSZWcgdHlwZXMgaW5zdGVhZCBvZiBHUFJSZWcuCisKKyAg
ICAgICAgVGhlIG9ubHkgbm9uLXRyaXZpYWwgYWRkaXRpb25hbCBhYnN0cmFjdGlvbiBuZWVkZWQg
d2FzIG92ZXIgdGhlIGlkZWFsCisgICAgICAgIGFyZ3VtZW50IHJlZ2lzdGVycyB1c2VkIGluIGEg
ZnVuY3Rpb24gY2FsbCwgc28gbG9hZGluZyB0aGUgYXJndW1lbnRzCisgICAgICAgIGZyb20gbWVt
b3J5IGNhbiBwdXQgdGhlbSBzdHJhaWdodCBpbiB0aGUgQUJJIHNwZWNpZmljIGFyZ3VtZW50Cisg
ICAgICAgIHJlZ2lzdGVyIHdoZW5ldmVyIHBvc3NpYmxlLCBvciBhcHByb3ByaWF0ZSB0ZW1wb3Jh
cmllcyBvdGhlcndpc2UuIEZvcgorICAgICAgICB0aGlzIEkgYWRkZWQgQ0NhbGxIZWxwZXJzOjpw
cmVmZXJyZWRBcmd1bWVudEdQUiAoZm9yIHBhc3NpbmcgaG9zdAorICAgICAgICBwb2ludGVycyBh
bmQgb3RoZXIgcHJpbWl0aXZlIHR5cGVzIHRoYXQgZml0IGluIGEgbWFjaGluZSByZWdpc3RlciBv
bgorICAgICAgICB0aGUgaG9zdCBwbGF0Zm9ybSksIGFuZCBDQ2FsbEhlbHBlcnM6OnByZWZlcnJl
ZEFyZ3VtZW50SlNSIChmb3IKKyAgICAgICAgcGFzc2luZyBKU1ZhbHVlL0VuY29kZWRKU1ZhbHVl
KS4gUGxlYXNlIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlc2UKKyAgICAgICAgaW4gdGhlIGNv
ZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2Vt
Ymxlci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6c3RyYik6CisgICAgICAgICog
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpl
bWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlD
RmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90T2JqZWN0KToKKyAgICAgICAgKiBq
aXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6c2l6ZU9mQXJn
KToKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjpwaWNrSlNSKToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpwcmVmZXJyZWRBcmd1bWVudEpTUik6CisgICAgICAgIChKU0M6OkNDYWxs
SGVscGVyczo6cHJlZmVycmVkQXJndW1lbnRHUFIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVT
aHVmZmxlci5oOgorICAgICAgICAqIGppdC9HUFJJbmZvLmg6CisgICAgICAgIChKU0M6OkpTVmFs
dWVSZWdzOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVJlZ3M6Om9w
ZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUmVnczo6dGFnR1BSIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVJlZ3M6OnBheWxvYWRHUFIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpKU1ZhbHVlUmVnczo6dXNlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWVS
ZWdzOjpvdmVybGFwcyBjb25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWVSZWdzOjpKU1ZhbHVl
UmVncyk6CisgICAgICAgIChKU0M6OkpTVmFsdWVSZWdzOjpwYXlsb2FkT25seSk6CisgICAgICAg
ICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluZyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJ
VC5oOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
b3Blbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMy
XzY0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlND
OjpKSVRDb2RlOjp1c2VEYXRhSUMpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlR2V0QnlJZElubGluZUFjY2Vzcyk6Cisg
ICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6
SklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAgICAqIGppdC9KSVRJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwpOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVj
a19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19w
cml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNs
b3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9kZWxfYnlf
aWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlf
Z2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRIYXNQcml2YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZVNsb3cpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAg
ICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisKIDIwMjEtMTAtMjIgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bm5lZWRlZCBIZWFw
OjptX3ZtLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzZGYzYTYxODZmNjNmODM0
NDJkZjE3Y2UyOTM0MjA0Mjg5M2YyYmRmLi5lYzU2YzEwZWFhMGU0ZjA2YTJlMzBlM2FhYjY0NmEw
ZjBkYmI2OGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzQ0Niw3ICszNDQ2
LDYgQEAKIAkJMTQ2QUFCMzcwQjY2QTk0NDAwRTU1RjE2IC8qIEpTU3RyaW5nUmVmQ0YuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nUmVmQ0YuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyog
Q29uc2VydmF0aXZlUm9vdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29uc2VydmF0aXZlUm9vdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDZGQTVBODEzNzhGNkIwMDAzNjI3QTMgLyogSGFuZGxlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGFuZGxlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTQ2RkU1MTExMUE3MTA0MzAwODdBRTY2IC8qIEpJVENhbGwzMl82NC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRDYWxsMzJfNjQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDcxNDgyRTIwRDMyMzY0MDA5MEU2MzAgLyogSlNXcmFw
cGVyTWFwVGVzdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXcmFwcGVy
TWFwVGVzdHMuaDsgcGF0aCA9IEFQSS90ZXN0cy9KU1dyYXBwZXJNYXBUZXN0cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDcxNDgyRjIwRDMyMzY1MDA5MEU2MzAgLyogSlNXcmFw
cGVyTWFwVGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBK
U1dyYXBwZXJNYXBUZXN0cy5tbTsgcGF0aCA9IEFQSS90ZXN0cy9KU1dyYXBwZXJNYXBUZXN0cy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3MzQxQ0IxREMwMkQ3MjAwQUEyOUJB
IC8qIEV4ZWN1dGFibGVCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4
ZWN1dGFibGVCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzY1LDcgKzYz
NjQsNiBAQAogCQkJCUZFM0EwNkFGMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRYb3JHZW5lcmF0
b3IuY3BwICovLAogCQkJCUZFM0EwNkIwMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRYb3JHZW5l
cmF0b3IuaCAqLywKIAkJCQk4NkNDODVBMjBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAg
Ki8sCi0JCQkJMTQ2RkU1MTExMUE3MTA0MzAwODdBRTY2IC8qIEpJVENhbGwzMl82NC5jcHAgKi8s
CiAJCQkJMEY4Rjk0NDMxNjY3NjM1MjAwRDYxOTcxIC8qIEpJVENvZGUuY3BwICovLAogCQkJCTg2
Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggKi8sCiAJCQkJMEZGQjgwQkIyMEE3
OTQ3MDAwMDZBQUY2IC8qIEpJVENvZGVJbmxpbmVzLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKaW5kZXggZTBlMjNhMmYzNmMxMjVlOTY3ZjBlZmE1YzRkOWI5OGRhODhjZWMxMy4uZGQ4
Y2I2MjcyNDFiZTg4Y2VlZjA3NDU5Yzg1ZWYzYzhhOWY4YzgzNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dApAQCAtNjQyLDcgKzY0Miw2IEBAIGppdC9KSVRCaXRBbmRHZW5lcmF0b3IuY3Bw
CiBqaXQvSklUQml0T3JHZW5lcmF0b3IuY3BwCiBqaXQvSklUQml0WG9yR2VuZXJhdG9yLmNwcAog
aml0L0pJVENhbGwuY3BwCi1qaXQvSklUQ2FsbDMyXzY0LmNwcAogaml0L0pJVENvZGUuY3BwCiBq
aXQvSklUQ29tcGlsYXRpb24uY3BwCiBqaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKaW5kZXggMWM4
Y2QwY2U0ZmQ4MjFhOGI4OTM0NWU0NzlkYmNkOWY1MzE0NGI3OS4uYjEyNjUzODVhNWQ3Mzk2N2Vk
NWU5MDk0ODIyMDllZGRiNGY0MjQyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaApAQCAtMTU2NSw4ICsxNTY1LDggQEAgcHVibGljOgog
ICAgICAgICBBU1NFUlQocm4gIT0gQVJNUmVnaXN0ZXJzOjpwYyk7CiAgICAgICAgIEFTU0VSVChp
bW0uaXNVSW50MTIoKSk7CiAKLSAgICAgICAgaWYgKCEoKHJ0IHwgcm4pICYgOCkgJiYgaW1tLmlz
VUludDcoKSkKLSAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDVJbW01UmVnM1JlZzMo
T1BfU1RSQl9pbW1fVDEsIGltbS5nZXRVSW50NygpID4+IDIsIHJuLCBydCk7CisgICAgICAgIGlm
ICghKChydCB8IHJuKSAmIDgpICYmIGltbS5pc1VJbnQ1KCkpCisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5vbmVXb3JkT3A1SW1tNVJlZzNSZWczKE9QX1NUUkJfaW1tX1QxLCBpbW0uZ2V0VUludDUo
KSwgcm4sIHJ0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29y
ZE9wMTJSZWc0UmVnNEltbTEyKE9QX1NUUkJfaW1tX1QyLCBybiwgcnQsIGltbS5nZXRVSW50MTIo
KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmNwcAppbmRleCA2NjNiZjk5OWZkNDdmOGYzMTNlMDQ2M2Q2YmRjNmVjZWY0ZjgwOTU0Li4w
NjNjYTgyZGQ1YjllZDY5YjJiOTBiNDQzNDNjNTc4YzI0MTdiNzAwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcApAQCAtMzA0LDggKzMwNCwx
MSBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJ
bXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbgogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKICAgICBpZiAodXNlRGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNjcmF0Y2ggcmVnaXN0ZXIgaXMgbm90IGdlbmVyYWxseSBzYWZl
IHRvIHVzZSBvbiBBUk12NywgYXMgdGhlIG1hY3JvCisgICAgICAgIC8vICAgICAgICBhc3NlbWJs
ZXIgYWx3YXlzIGFzc3VtZXMgaXQgaXMgYXZhaWxhYmxlLiBBdCB0aGUgbW9tZW50LCBpdCBkb2Vz
IGhhcHBlbiB0byB3b3JrCisgICAgICAgIC8vICAgICAgICB3aXRoIHRoZSBjb2RlIGJlbG93Lgog
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKLSAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zm
c2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0
Y2hHUFIpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKICAgICAg
ICAgewogICAgICAgICAgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGRpc2Fs
bG93U2NyYXRjaChqaXQpOwpAQCAtMzY1LDkgKzM2OCw2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHCiBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gVXNlcyBEYXRhSUMKLSNlbmRpZgogICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCmluZGV4IDZhYjRjZWI0YjZhNTA0
YzQ4MjY0ZDUyZDFkMTU4MWJlNmE1OTBhMzAuLmZkMzRiZWNjZmYyYjBlOGI2NDZkY2M3MGU0YzJj
Mzg4ZGU1NDVjZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcApAQCAtNDM0LDcgKzQzNCw2IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2V0Q2FjaGVUeXBlKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlckJhc2UmCiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
JiB1bmxpbmtlZFN0dWJJbmZvKQogewotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYWNjZXNzVHlw
ZSA9IHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKICAgICBzdGFydCA9IHVubGlua2VkU3R1
YkluZm8uc3RhcnQ7CiAgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9j
YXRpb247CkBAIC00NDUsOCArNDQ0LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlh
bGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGkKIAogICAg
IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7
CiAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0
dWJJbmZvLmJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSB7Ci0gICAgICAgIC8vIEZvciBpdGVy
YXRvcl9uZXh0LCB3ZSBjYW4ndCBjbG9iYmVyIHRoZSAiZG9udENsb2JiZXJSZWdpc3RlciIgcmVn
aXN0ZXIgZWl0aGVyLgotICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXIpOworICAgICAgICAvLyBGb3IgaXRlcmF0b3Jf
bmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVySlNSIiByZWdpc3RlciBlaXRo
ZXIuCisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
ZG9udENsb2JiZXJKU1IpOwogICAgIH0KIAogICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewpAQCAt
NDgwLDEzICs0NzksMTMgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21V
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGkKICAgICBjYXNlIEFjY2Vz
c1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWU6CiAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZUJyYW5kOiAKICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJy
YW5kT3B0aW1pemU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJp
dmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CiAgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKQEAgLTU0Myw5NiArNTQy
LDE1MiBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saQogICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkg
ewogICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CiAgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IGZhbHNlOwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKLSAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxC
eVZhbFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHJlZ3MucHJvcGVy
dHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BS
KCk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0
SlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAg
IGJhc2VUYWdHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQUigp
OworICAgICAgICB2LnByb3BlcnR5VGFnR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHlKU1IudGFnR1BSKCk7CisgICAgICAgIHZhbHVlVGFnR1BSID0gQmFzZWxpbmVEZWxC
eVZhbFJlZ2lzdGVyczo6cmVzdWx0SlNSLnRhZ0dQUigpOworI2VuZGlmCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKICAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gdHJ1ZTsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6
YmFzZUpTUi5wYXlsb2FkR1BSKCk7CiAgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBJbnZhbGlk
R1BSUmVnOwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVz
dWx0OwotICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdEpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURl
bEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
ICAgIGJhc2VUYWdHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IudGFnR1BS
KCk7CisgICAgICAgIHYucHJvcGVydHlUYWdHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2
YWx1ZVRhZ0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNSLnRhZ0dQUigp
OworI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6
CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKICAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gZmFsc2U7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOwotICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Ci0gICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cmVzdWx0OwotICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgcmVncy5wcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBheWxvYWRH
UFIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHRKU1IucGF5bG9hZEdQUigpOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAg
ICAgYmFzZVRhZ0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IudGFnR1BS
KCk7CisgICAgICAgIHYucHJvcGVydHlUYWdHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eUpTUi50YWdHUFIoKTsKKyAgICAgICAgdmFsdWVUYWdHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHRKU1IudGFnR1BSKCk7CisjZW5kaWYKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgogICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSBmYWxzZTsKICAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9IGZh
bHNlOworI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnZhbHVlOwogICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6cmVzdWx0OwogICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CiAgICAgICAgIG1fc3R1YkluZm9HUFIgPSBC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFs
dWVKU1IucGF5bG9hZEdQUigpOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6cmVzdWx0R1BSOworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9KU1IucGF5bG9hZEdQUigpOworICAgICAgICBt
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsK
KyAgICAgICAgYmFzZVRhZ0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlVGFnR1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgdi5wcm9wZXJ0eVRhZ0dQUiA9IEludmFsaWRHUFJS
ZWc7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFs
OgogICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAogICAgIGNhc2UgQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKICAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0g
ZmFsc2U7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7
Ci0gICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OwotICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFz
ZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgdmFsdWVH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdEpTUi5wYXlsb2FkR1BSKCk7Cisg
ICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
R1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGJhc2VUYWdHUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IudGFnR1BSKCk7CisgICAgICAgIHYucHJvcGVydHlU
YWdHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnRhZ0dQUigpOwor
ICAgICAgICB2YWx1ZVRhZ0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0SlNS
LnRhZ0dQUigpOworI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5CeUlkOgogICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOwogICAgICAgICBy
ZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgICAgICB2LnRoaXNUYWdHUFIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICBiYXNlVGFnR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IudGFnR1BS
KCk7CisgICAgICAgIHZhbHVlVGFnR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dEpTUi50YWdHUFIoKTsKKyNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5
cGU6OlRyeUdldEJ5SWQ6CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgogICAg
IGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKICAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVy
ID0gdHJ1ZTsKICAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICAgICAgdmFsdWVH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgbV9zdHViSW5m
b0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAg
ICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNSLnBheWxv
YWRHUFIoKTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c3R1YkluZm9HUFI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdi50aGlzVGFn
R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZVRhZ0dQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZUpTUi50YWdHUFIoKTsKKyAgICAgICAgdmFsdWVUYWdHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUi50YWdHUFIoKTsKKyNlbmRpZgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKICAgICAgICAg
aGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAgIHJlZ3MudGhpc0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7Ci0gICAgICAg
IG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdEpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHJlZ3Mu
dGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzSlNSLnBheWxv
YWRHUFIoKTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBi
YXNlVGFnR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2VKU1IudGFn
R1BSKCk7CisgICAgICAgIHZhbHVlVGFnR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnJlc3VsdEpTUi50YWdHUFIoKTsKKyAgICAgICAgdi50aGlzVGFnR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNKU1IudGFnR1BSKCk7CisjZW5kaWYKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgogICAgICAgICBoYXND
b25zdGFudElkZW50aWZpZXIgPSB0cnVlOwogICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlk
R1BSUmVnOwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNl
OwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7Ci0g
ICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSLnBh
eWxvYWRHUFIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OnZhbHVlSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgdi50aGlzVGFnR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZVRhZ0dQUiA9
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZUpTUi50YWdHUFIoKTsKKyAgICAgICAgdmFs
dWVUYWdHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlSlNSLnRhZ0dQUigpOwor
I2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CiAg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOwotICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7Ci0gICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6dmFsdWU7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHlKU1IucGF5bG9hZEdQUigp
OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlSlNS
LnBheWxvYWRHUFIoKTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwogICAgICAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NU
eXBlOjpQdXRCeVZhbCkKLSAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZUdQUjsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBiYXNlVGFnR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
YmFzZUpTUi50YWdHUFIoKTsKKyAgICAgICAgdi5wcm9wZXJ0eVRhZ0dQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnRhZ0dQUigpOworICAgICAgICB2YWx1ZVRhZ0dQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlSlNSLnRhZ0dQUigpOworI2VuZGlm
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgog
ICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CiAgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IGZhbHNlOwogICAgICAgICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7
Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsK
LSAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpi
cmFuZDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZEpTUi5wYXlsb2FkR1BSKCk7CisgICAg
ICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1Yklu
Zm9HUFI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdmFsdWVUYWdHUFIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICBiYXNlVGFnR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnM6OmJhc2VKU1IudGFnR1BSKCk7CisgICAgICAgIHYuYnJhbmRUYWdHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmRKU1IudGFnR1BSKCk7CisjZW5kaWYKICAgICAg
ICAgYnJlYWs7CiAgICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odW5saW5rZWRTdHViSW5m
byk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKIH0KIAogI2lmIEFTU0VSVF9F
TkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAppbmRleCA0YmQ2
ZTZjODg2ZjUzZGFkYTY3Njc5NjAxYjYwMDdhOWYxOTFjZTA2Li45Y2I4MmM3ZTExYThlODA3ZWNk
OGQ2YzFkZGQ2MzExMTBhMzYxY2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmgKQEAgLTg1Miw2ICs4NTIsMTQ2IEBAIHB1YmxpYzoKICAgICB2b2lkIGVuc3VyZVNo
YWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRj
aDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKICAgICBzdGF0aWMgdm9pZCBlbWl0SklU
Q29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBT
Y29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4sIGNvbnN0IGNoYXIqKTsKKworcHJpdmF0
ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgQXJnTnVt
PgorICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjplbmFibGVfaWZfdDwoRnVuY3Rpb25UcmFpdHM8
T3BlcmF0aW9uVHlwZT46OmFyaXR5ID4gQXJnTnVtKSwgc2l6ZV90PiBzaXplT2ZBcmcoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHNpemVvZih0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRp
b25UeXBlPjo6dGVtcGxhdGUgQXJndW1lbnRUeXBlPEFyZ051bT4pOworICAgIH0KKworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHVuc2ln
bmVkIEFyZ051bSwgdW5zaWduZWQgSW5kZXggPSBBcmdOdW0sIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwaWNrSlNSKEdQUlJlZyBmaXJzdCwgQXJn
cy4uLiByZXN0KQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplT2ZBcmc8T3BlcmF0
aW9uVHlwZSwgQXJnTnVtIC0gSW5kZXg+KCkgPD0gOCwgIkRvbid0IGtub3cgaG93IHRvIGhhbmRs
ZSBsYXJnZSBhcmd1bWVudHMiKTsKKyAgICAgICAgaWYgY29uc3RleHByICghSW5kZXgpCisgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3MgeyBmaXJzdCB9OworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIFVOVVNFRF9QQVJBTShmaXJzdCk7IC8vIE90aGVyd2lzZSB3YXJuaW5nIGR1ZSB0
byBjb25zdGV4cHIKKyAgICAgICAgICAgIHJldHVybiBwaWNrSlNSPE9wZXJhdGlvblR5cGUsIEFy
Z051bSwgSW5kZXggLSAxPihyZXN0Li4uKTsKKyAgICAgICAgfQorICAgIH0KKyNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHVuc2ln
bmVkIEFyZ051bSwgdW5zaWduZWQgSW5kZXggPSBBcmdOdW0sIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwaWNrSlNSKEdQUlJlZyBmaXJzdCwgR1BS
UmVnIHNlY29uZCwgR1BSUmVnIHRoaXJkLCBBcmdzLi4uIHJlc3QpCisgICAgeworICAgICAgICBj
b25zdGV4cHIgc2l6ZV90IHNpemVPZkN1cnJlbnRBcmcgPSBzaXplT2ZBcmc8T3BlcmF0aW9uVHlw
ZSwgQXJnTnVtIC0gSW5kZXg+KCk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZU9mQ3VycmVu
dEFyZyA8PSA4LCAiRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGxhcmdlIGFyZ3VtZW50cyIpOwor
ICAgICAgICBpZiBjb25zdGV4cHIgKCFJbmRleCkgeworICAgICAgICAgICAgaWYgY29uc3RleHBy
IChzaXplT2ZDdXJyZW50QXJnIDw9IDQpIHsKKyAgICAgICAgICAgICAgICAvLyBGaXRzIGluIHNp
bmdsZSBHUFIKKyAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0oc2Vjb25kKTsgLy8gT3RoZXJ3
aXNlIHdhcm5pbmcgZHVlIHRvIGNvbnN0ZXhwcgorICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJB
TSh0aGlyZCk7IC8vIE90aGVyd2lzZSB3YXJuaW5nIGR1ZSB0byBjb25zdGV4cHIKKyAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGZpcnN0KTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZmlyc3QgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxICYmIHNlY29uZCA9
PSBHUFJJbmZvOjphcmd1bWVudEdQUjIgJiYgdGhpcmQgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIz
KSB7CisgICAgICAgICAgICAgICAgLy8gV2lkZSBhcmd1bWVudCBwYXNzZWQgaW4gR1BScyBuZWVk
cyB0byBzdGFydCB3aXRoIGV2ZW4gcmVnaXN0ZXIgbnVtYmVyLCBzbyBza2lwIGFyZ3VtZW50R1BS
MQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyB7IHRoaXJkLCBzZWNvbmQgfTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgaXMgZWl0aGVy
IGFuIGV2ZW4gcmVnaXN0ZXIsIG9yIHRoaXMgYXJndW1lbnQgd2lsbCBiZSBwdXNoZWQgdG8gdGhl
IHN0YWNrLCBzbyBpdCBkb2VzIG5vdCBtYXR0ZXIKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZVJlZ3MgeyBzZWNvbmQsIGZpcnN0IH07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIoc2l6ZU9mQ3VycmVudEFyZyA8PSA0KSB7Cisg
ICAgICAgICAgICAgICAgLy8gRml0cyBpbiBzaW5nbGUgR1BSCisgICAgICAgICAgICAgICAgVU5V
U0VEX1BBUkFNKGZpcnN0KTsgLy8gT3RoZXJ3aXNlIHdhcm5pbmcgZHVlIHRvIGNvbnN0ZXhwcgor
ICAgICAgICAgICAgICAgIHJldHVybiBwaWNrSlNSPE9wZXJhdGlvblR5cGUsIEFyZ051bSwgSW5k
ZXggLSAxPihzZWNvbmQsIHRoaXJkLCByZXN0Li4uKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
Zmlyc3QgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxICYmIHNlY29uZCA9PSBHUFJJbmZvOjphcmd1
bWVudEdQUjIgJiYgdGhpcmQgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIzKSB7CisgICAgICAgICAg
ICAgICAgLy8gV2lkZSBhcmd1bWVudCBwYXNzZWQgaW4gR1BScyBuZWVkcyB0byBzdGFydCB3aXRo
IGV2ZW4gcmVnaXN0ZXIgbnVtYmVyLCBzbyBza2lwIGFyZ3VtZW50R1BSMSwgYnV0IHJldXNlIGl0
IGxhdGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJn
TnVtLCBJbmRleCAtIDE+KGZpcnN0LCByZXN0Li4uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gRmlyc3QgaXMgZWl0aGVyIGFuIGV2ZW4gcmVnaXN0ZXIsIG9yIHRo
aXMgYXJndW1lbnQgd2lsbCBiZSBwdXNoZWQgdG8gdGhlIHN0YWNrLCBzbyBpdCBkb2VzIG5vdCBt
YXR0ZXIKKyAgICAgICAgICAgICAgICByZXR1cm4gcGlja0pTUjxPcGVyYXRpb25UeXBlLCBBcmdO
dW0sIEluZGV4IC0gMT4odGhpcmQsIHJlc3QuLi4pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHVuc2lnbmVk
IEFyZ051bSwgdW5zaWduZWQgSW5kZXggPSBBcmdOdW0sIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAg
c3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwaWNrSlNSKEdQUlJlZyBmaXJzdCwgR1BSUmVn
IHNlY29uZCkKKyAgICB7CisgICAgICAgIGNvbnN0ZXhwciBzaXplX3Qgc2l6ZU9mQ3VycmVudEFy
ZyA9IHNpemVPZkFyZzxPcGVyYXRpb25UeXBlLCBBcmdOdW0gLSBJbmRleD4oKTsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzaXplT2ZDdXJyZW50QXJnIDw9IDgsICJEb24ndCBrbm93IGhvdyB0byBo
YW5kbGUgbGFyZ2UgYXJndW1lbnRzIik7CisgICAgICAgIC8vIEJhc2UgY2FzZSwgJ2ZpcnN0JyBh
bmQgJ3NlY29uZCcgYXJlIG5ldmVyIGFyZ3VtZW50IHJlZ2lzdGVyLCBvciB3aWxsIGJlIHB1c2hl
ZCBvbiB0aGUgc3RhY2sgYW55d2F5CisgICAgICAgIGlmIGNvbnN0ZXhwciAoIUluZGV4KSB7Cisg
ICAgICAgICAgICBpZiBjb25zdGV4cHIgKHNpemVPZkN1cnJlbnRBcmcgPD0gNCkgeworICAgICAg
ICAgICAgICAgIFVOVVNFRF9QQVJBTShzZWNvbmQpOyAvLyBPdGhlcndpc2Ugd2FybmluZyBkdWUg
dG8gY29uc3RleHByCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShmaXJzdCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZVJlZ3MgeyBzZWNvbmQsIGZpcnN0IH07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiBjb25zdGV4cHIoc2l6ZU9mQ3VycmVudEFyZyA8PSA0KSB7CisgICAgICAgICAgICAg
ICAgVU5VU0VEX1BBUkFNKGZpcnN0KTsgLy8gT3RoZXJ3aXNlIHdhcm5pbmcgZHVlIHRvIGNvbnN0
ZXhwcgorICAgICAgICAgICAgICAgIHJldHVybiBwaWNrSlNSPE9wZXJhdGlvblR5cGUsIEFyZ051
bSwgSW5kZXggLSAxPihzZWNvbmQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRURfV0lUSF9NRVNTQUdFKCJPdXQgb2YgcmVnaXN0
ZXJzIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdW5zaWduZWQgQXJnTnVtLCB1bnNpZ25lZCBJbmRleCA9IEFyZ051bSwgdHlwZW5h
bWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIHBpY2tKU1IoR1BS
UmVnIGZpcnN0KQorICAgIHsKKyAgICAgICAgY29uc3RleHByIHNpemVfdCBzaXplT2ZDdXJyZW50
QXJnID0gc2l6ZU9mQXJnPE9wZXJhdGlvblR5cGUsIEFyZ051bSAtIEluZGV4PigpOworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVPZkN1cnJlbnRBcmcgPD0gOCwgIkRvbid0IGtub3cgaG93IHRv
IGhhbmRsZSBsYXJnZSBhcmd1bWVudHMiKTsKKyAgICAgICAgLy8gQmFzZSBjYXNlLCAnZmlyc3Qn
IGlzIG5ldmVyIGFuIGFyZ3VtZW50IHJlZ2lzdGVyLCBvciB3aWxsIGJlIHB1c2hlZCBvbiB0aGUg
c3RhY2sgYW55d2F5CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc2l6ZU9mQ3VycmVudEFyZyA8PSA0
KQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShmaXJzdCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEX1dJVEhf
TUVTU0FHRSgiT3V0IG9mIHJlZ2lzdGVycyIpOworICAgIH0KKyNlbmRpZgorCitwdWJsaWM6Cisg
ICAgLy8gU2VlIHByZWZlcnJlZEFyZ3VtZW50R1BSIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1
bmN0aW9uLiBUaGlzIHZlcnNpb24gcmV0dXJucyBhIEpTVmFsdWVSZWdzCisgICAgLy8gaW5zdGVh
ZCBvZiBhIEdQUiwgd2hpY2ggb24gSlNWQUxVRTY0IGFyZSBlcXVpdmFsZW50LCBidXQgb24gSlNW
QUxVRTMyXzY0IGEgSlNWYWx1ZVJlZ3MgaXMKKyAgICAvLyByZXF1aXJlZCB0byBob2xkIGEgNjQt
Yml0IHdpZGUgZnVuY3Rpb24gYXJndW1lbnQsIHNvIHVzZSB0aGlzIGluIHBhcnRpY3VsYXIgd2hl
biBwYXNzaW5nIGEKKyAgICAvLyBKU1ZhbHVlL0VuY29kZWRKU1ZhbHVlIGJlIGNvbXBhdGlibGUg
d2l0aCBib3RoIEpTVkFMVUU2NCBhbiBKU1ZBTFVFMzJfNjQgcGxhdGZvcm1zLCBhbmQgdXNlCisg
ICAgLy8gcHJlZmVycmVkQXJndW1lbnRHUFIgd2hlbiBwYXNzaW5nIGhvc3QgcG9pbnRlcnMuCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIEFyZ051bT4KKyAg
ICBzdGF0aWMgY29uc3RleHByIHN0ZDo6ZW5hYmxlX2lmX3Q8KEZ1bmN0aW9uVHJhaXRzPE9wZXJh
dGlvblR5cGU+Ojphcml0eSA+IEFyZ051bSksIEpTVmFsdWVSZWdzPgorICAgIHByZWZlcnJlZEFy
Z3VtZW50SlNSKCkKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyNpZiAhT1MoV0lORE9XUykK
KyAgICAgICAgcmV0dXJuIHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJnTnVtPigKKyAgICAgICAg
ICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIsCisgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjMsIEdQUklu
Zm86OmFyZ3VtZW50R1BSNCwgR1BSSW5mbzo6YXJndW1lbnRHUFI1KTsKKyNlbHNlCisgICAgICAg
IHJldHVybiBwaWNrSlNSPE9wZXJhdGlvblR5cGUsIEFyZ051bT4oCisgICAgICAgICAgICBHUFJJ
bmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyLAorICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIzLCBHUFJJbmZvOjpub25B
cmdHUFIwLCAgIEdQUkluZm86Om5vbkFyZ0dQUjEpOworI2VuZGlmCisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorI2lmIENQVShBUk1fVEhVTUIyKQorICAgICAgICAvLyBUaGUgbGFzdCByZWdpc3Rl
ciBpcyBndWFyYW50ZWVkIHRvIGJlIHB1c2hlZCBvbnRvIHRoZSBzdGFjayBmb3IgY2FsbHMsIHNv
IHdlIGNhbiB1c2UKKyAgICAgICAgLy8gdGhlIGxpbmsgcmVnaXN0ZXIgYXMgYSB0ZW1wb3Jhcnku
CisgICAgICAgIHJldHVybiBwaWNrSlNSPE9wZXJhdGlvblR5cGUsIEFyZ051bT4oCisgICAgICAg
ICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIyLAorICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIzLCBHUFJJ
bmZvOjpyZWdUNywgICAgICAgIEdQUkluZm86OnJlZ1Q2LAorICAgICAgICAgICAgR1BSSW5mbzo6
cmVnVDQsICAgICAgICBHUFJJbmZvOjpyZWdUNSwgICAgICAgIEFSTVJlZ2lzdGVyczo6bHIpOwor
I2VsaWYgQ1BVKE1JUFMpCisgICAgICAgIHJldHVybiBwaWNrSlNSPE9wZXJhdGlvblR5cGUsIEFy
Z051bT4oCisgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLAorICAgICAgICAgICAgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzLCBHUFJJbmZvOjpyZWdUMiwgICAgICAgIEdQUkluZm86OnJlZ1QzLAorICAgICAg
ICAgICAgR1BSSW5mbzo6cmVnVDQsICAgICAgICBHUFJJbmZvOjpyZWdUNSwgICAgICAgIEdQUklu
Zm86OnJlZ1Q2KTsKKyNlbmRpZgorI2VuZGlmCisgICAgfQorCisgICAgLy8gQ29tcHV0ZXMgKHN0
YXRpY2FsbHksIGF0IGNvbXBpbGF0aW9uIHRpbWUpLCB0aGUgaWRlYWwgbWFjaGluZSByZWdpc3Rl
ciBhbiBhcmd1bWVudCBzaG91bGQgYmUKKyAgICAvLyBsb2FkZWQgaW50byBmb3IgYSBmdW5jdGlv
biBjYWxsLiBUaGlzIHlpZWxkcyB0aGUgQUJJIHNwZWNpZmljIGFyZ3VtZW50IHJlZ2lzdGVycyBm
b3IgdGhlCisgICAgLy8gaW5pdGlhbCBhcmd1bWVudHMgYXMgYXBwcm9wcmlhdGUsIHRoZW4gc3Vp
dGFibGUgdGVtcG9yYXJ5IHJlZ2lzdGVycyBmb3IgdGhlIHJlbWFpbmluZworICAgIC8vIGFyZ3Vt
ZW50cy4gVGhlIGlkZWEgaXMgdGhhdCAnc2V0dXBBcmd1bWVudHMnIHdpbGwgaGF2ZSB0byBkbyB0
aGUgbWluaW1hbCBhbW91bnQgb2Ygd29yayB3aGVuCisgICAgLy8gdXNpbmcgdGhlc2UgcmVnaXN0
ZXJzIHRvIGhvbGQgdGhlIGFyZ3VtZW50cywgc28gaWYgeW91IGFyZSBsb2FkaW5nIG1vc3QgYXJn
dW1lbnRzIGZyb20gbWVtb3J5CisgICAgLy8gYW55d2F5LCB1c2luZyB0aGVzZSByZWdpc3RlcnMg
eWllbGRzIHRoZSBzbWFsbGVzdCBjb2RlIHJlcXVpcmVkIGZvciBhIGNhbGwuCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIEFyZ051bT4KKyAgICBzdGF0aWMg
Y29uc3RleHByIHN0ZDo6ZW5hYmxlX2lmX3Q8KEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+
Ojphcml0eSA+IEFyZ051bSksIEdQUlJlZz4KKyAgICBwcmVmZXJyZWRBcmd1bWVudEdQUigpCisg
ICAgeworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZU9m
QXJnPE9wZXJhdGlvblR5cGUsIEFyZ051bT4oKSA8PSA0LCAiQXJndW1lbnQgZG9lcyBub3QgZml0
IGluIEdQUiIpOworI2VuZGlmCisgICAgICAgIHJldHVybiBwcmVmZXJyZWRBcmd1bWVudEpTUjxP
cGVyYXRpb25UeXBlLCBBcmdOdW0+KCkucGF5bG9hZEdQUigpOworICAgIH0KIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
Zmxlci5oCmluZGV4IGExNzYyNDRlMWUzMDk1NjY3NzM0NjBhZDIwNjUwZTE5YmMzZGFkNjguLmJj
YjUyZTc5YjhmZTgyMTQyZWU4ZGYzZTUxNTU3MzQ5YzI0OWRjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVi
bGljOgogCiAgICAgLy8gQW55IHJlZ2lzdGVyIHRoYXQgaGFzIGJlZW4gbG9ja2VkIG9yIGFjcXVp
cmVkIG11c3QgYmUgcmVsZWFzZWQKICAgICAvLyBiZWZvcmUgY2FsbGluZyBwcmVwYXJlRm9yVGFp
bENhbGwoKSBvciBwcmVwYXJlRm9yU2xvd1BhdGgoKS4KKyAgICAvLyBVbmxlc3MgeW91IGtub3cg
dGhlIHJlZ2lzdGVyIGlzIG5vdCB0aGUgdGFyZ2V0IG9mIGEgcmVjb3ZlcnkuCiAgICAgdm9pZCBs
b2NrR1BSKEdQUlJlZyBncHIpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fbG9ja2VkUmVnaXN0
ZXJzLmdldChncHIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BS
SW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKaW5kZXggMmY3Y2Y1
YWJiYjM5OWNhNzQ0M2VhYzgzMjAzMmY2YzA3M2I0MmJjOS4uYjIwZTMzMWI1NWNmMzJhMTI5MTcx
OTIwMDUzZTg1YzQ0ZDVhMTNkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HUFJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKQEAg
LTY5LDE1ICs2OSwyMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiBtX2dwciA9PSBJbnZhbGlkR1BSUmVnOyB9CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByICE9IEludmFsaWRHUFJSZWc7IH0KIAotICAgIGJvb2wg
b3BlcmF0b3I9PShKU1ZhbHVlUmVncyBvdGhlcikgeyByZXR1cm4gbV9ncHIgPT0gb3RoZXIubV9n
cHI7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oSlNWYWx1ZVJlZ3Mgb3RoZXIpIHsgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOyB9CisgICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShKU1ZhbHVl
UmVncyBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9ncHIgPT0gb3RoZXIubV9ncHI7IH0KKyAgICBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KEpTVmFsdWVSZWdzIG90aGVyKSBjb25zdCB7IHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsgfQogICAgIAogICAgIEdQUlJlZyBncHIoKSBjb25zdCB7IHJl
dHVybiBtX2dwcjsgfQotICAgIEdQUlJlZyB0YWdHUFIoKSBjb25zdCB7IHJldHVybiBJbnZhbGlk
R1BSUmVnOyB9Ci0gICAgR1BSUmVnIHBheWxvYWRHUFIoKSBjb25zdCB7IHJldHVybiBtX2dwcjsg
fQotICAgIAotICAgIGJvb2wgdXNlcyhHUFJSZWcgZ3ByKSBjb25zdCB7IHJldHVybiBtX2dwciA9
PSBncHI7IH0KKyAgICBjb25zdGV4cHIgR1BSUmVnIHRhZ0dQUigpIGNvbnN0IHsgcmV0dXJuIElu
dmFsaWRHUFJSZWc7IH0KKyAgICBjb25zdGV4cHIgR1BSUmVnIHBheWxvYWRHUFIoKSBjb25zdCB7
IHJldHVybiBtX2dwcjsgfQogICAgIAorICAgIGNvbnN0ZXhwciBib29sIHVzZXMoR1BSUmVnIGdw
cikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChncHIgPT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fZ3ByID09IGdwcjsKKyAgICB9
CisgICAgY29uc3RleHByIGJvb2wgb3ZlcmxhcHMoSlNWYWx1ZVJlZ3Mgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIHVzZXMob3RoZXIucGF5bG9hZEdQUigpKTsgfQorCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgpAQCAtMTY2LDcgKzE3Miw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgfQogICAgIAotICAgIEpTVmFsdWVSZWdzKEdQUlJlZyB0YWdHUFIsIEdQ
UlJlZyBwYXlsb2FkR1BSKQorICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyhHUFJSZWcgdGFnR1BS
LCBHUFJSZWcgcGF5bG9hZEdQUikKICAgICAgICAgOiBtX3RhZ0dQUih0YWdHUFIpCiAgICAgICAg
ICwgbV9wYXlsb2FkR1BSKHBheWxvYWRHUFIpCiAgICAgewpAQCAtMTc3LDcgKzE4Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdzKGdwcjEsIGdwcjIpOwogICAgIH0KICAg
ICAKLSAgICBzdGF0aWMgSlNWYWx1ZVJlZ3MgcGF5bG9hZE9ubHkoR1BSUmVnIGdwcikKKyAgICBz
dGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIHBheWxvYWRPbmx5KEdQUlJlZyBncHIpCiAgICAg
ewogICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3MoSW52YWxpZEdQUlJlZywgZ3ByKTsKICAgICB9
CkBAIC0xODksMTUgKzE5NSwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB8fCBzdGF0aWNfY2Fz
dDxHUFJSZWc+KG1fcGF5bG9hZEdQUikgIT0gSW52YWxpZEdQUlJlZzsKICAgICB9CiAKLSAgICBi
b29sIG9wZXJhdG9yPT0oSlNWYWx1ZVJlZ3Mgb3RoZXIpIGNvbnN0CisgICAgY29uc3RleHByIGJv
b2wgb3BlcmF0b3I9PShKU1ZhbHVlUmVncyBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX3RhZ0dQUiA9PSBvdGhlci5tX3RhZ0dQUgogICAgICAgICAgICAgJiYgbV9wYXlsb2Fk
R1BSID09IG90aGVyLm1fcGF5bG9hZEdQUjsKICAgICB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KEpT
VmFsdWVSZWdzIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorICAg
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oSlNWYWx1ZVJlZ3Mgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAgICAgCi0gICAgR1BSUmVnIHRhZ0dQUigpIGNvbnN0
IHsgcmV0dXJuIG1fdGFnR1BSOyB9Ci0gICAgR1BSUmVnIHBheWxvYWRHUFIoKSBjb25zdCB7IHJl
dHVybiBtX3BheWxvYWRHUFI7IH0KKyAgICBjb25zdGV4cHIgR1BSUmVnIHRhZ0dQUigpIGNvbnN0
IHsgcmV0dXJuIG1fdGFnR1BSOyB9CisgICAgY29uc3RleHByIEdQUlJlZyBwYXlsb2FkR1BSKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXlsb2FkR1BSOyB9CiAgICAgR1BSUmVnIGdwcihXaGljaFZhbHVl
V29yZCB3aGljaCkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAod2hpY2gpIHsKQEAgLTIx
MCw4ICsyMTYsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdGFnR1BSKCk7CiAgICAgfQog
Ci0gICAgYm9vbCB1c2VzKEdQUlJlZyBncHIpIGNvbnN0IHsgcmV0dXJuIG1fdGFnR1BSID09IGdw
ciB8fCBtX3BheWxvYWRHUFIgPT0gZ3ByOyB9Ci0gICAgCisgICAgY29uc3RleHByIGJvb2wgdXNl
cyhHUFJSZWcgZ3ByKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGdwciA9PSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbV90YWdHUFIg
PT0gZ3ByIHx8IG1fcGF5bG9hZEdQUiA9PSBncHI7CisgICAgfQorICAgIGNvbnN0ZXhwciBib29s
IG92ZXJsYXBzKEpTVmFsdWVSZWdzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHVzZXMob3RoZXIucGF5bG9hZEdQUigpKSB8fCB1c2VzKG90aGVyLnRhZ0dQUigpKTsKKyAgICB9
CisKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggNmYyY2VkNzMzOTY1YTZiMDJhOTc1YmE0MWJj
M2I3NzUwN2IyODFjZi4uYjE3OWM4NTE1MGRkOWM3ZDM5OWUwY2M3M2FhOWZlNjQ0YmM4MTAwNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtODAwLDEzICs4MDAsMTEgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBp
bnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1l
bnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7Ci0gICAgICAgICAgICAgICAgbG9hZDY0KEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0
ZXIsIG9mZnNldCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyB7IHJlZ1QwIH07CiAjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgICAgICAgICAgICAg
bG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAg
ICAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgeyByZWdUMSwgcmVnVDAg
fTsKICNlbmRpZgorICAgICAgICAgICAgICAgIGxvYWRWYWx1ZShBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBvZmZzZXQpLCByZXN1bHRSZWdzKTsKICAgICAgICAgICAgICAgICBzdG9yZVZhbHVl
KHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmls
ZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC05MzksNyArOTM3LDYgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAg
fQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICBhdXRvIGZpbmFsaXplSUNzID0gWyZdIChhdXRv
JiBnZW5lcmF0b3JzKSB7CiAgICAgICAgIGZvciAoYXV0byYgZ2VuIDogZ2VuZXJhdG9ycykgewog
ICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c3RhcnQgPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zdGFydCk7CkBAIC05NTksMzEg
Kzk1NiwxMCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJQ3MobV9pbkJ5VmFscyk7
CiAgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CiAgICAgZmluYWxpemVJQ3MobV9wcml2
YXRlQnJhbmRBY2Nlc3Nlcyk7Ci0jZWxzZQotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0
QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFs
cywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRo
VGhpcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMs
IHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0
Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVm
ZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIp
OwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwotICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOwotI2Vu
ZGlmCiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9u
SW5mbykgewotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZv
JiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5mbzsKICAgICAgICAg
aW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOwotI2Vsc2UKLSAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87Ci0gICAgICAgIGlu
Zm8uc2V0Q29kZUxvY2F0aW9ucygKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAotICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlv
bkluZm8uZG9uZUxvY2F0aW9uKSk7Ci0jZW5kaWYKLQogICAgIH0KIAogICAgIEpJVENvZGVNYXBC
dWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggODFh
OTlkYTE4ZDA5ZDcwOGFkYmU5YzdmMGE4ZDhlNjljM2ZiMWViMC4uNDY5ZDNlMDgyNjk3N2FkMjNm
ZjExMWQ1YTZlZmQ4ZTFlY2IwMDhlZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0xNTIs
MTMgKzE1Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgc3RydWN0IENhbGxDb21waWxhdGlv
bkluZm8gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENh
bGxMaW5rSW5mbzsKICAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0lu
Zm9Db25zdGFudDsKLSNlbHNlCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0
aFN0YXJ0OwotICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKLSNlbmRpZgogICAg
IH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNz
UHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKQEAg
LTI5NCw3ICsyODksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BD
YWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCisKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAg
ICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzA2LDE5ICszMDEsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6
Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBPcDo6b3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFu
dCk7Ci0jZWxzZQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgc3RkOjpl
bmFibGVfaWZfdDwKLSAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3Mg
JiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCi0gICAgICAgICAgICAmJiBP
cDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci0gICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8Ci0gICAgICAgICAgICBPcDo6b3Bj
b2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3Rf
dmFyYXJncwotICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAg
ICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyop
OwotI2VuZGlmCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wg
Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CkBAIC00MjYs
NiArNDA4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0
KQogCisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKEpTVmFsdWVSZWdz
KTsKKyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3Ms
IFZpcnR1YWxSZWdpc3Rlcik7CisKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9u
YWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVs
YXRpb25hbENvbmRpdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRl
eCBmYzgxYTVlOTBiNDc5ZmFkYjY3NjAzMDE3NTkyNzUxMTM3MzA4NDA3Li5iZDc5NzVhMWExZjlj
ZWVmNGU0OGY4ZmYxM2EyNTBjN2E1NmRjM2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmIEVO
QUJMRShKSVQpCi0jaWYgVVNFKEpTVkFMVUU2NCkKKwogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5j
bHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKQEAgLTQyLDEzICs0Miw0MyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXR1cm5WYWx1ZUpTUiB7IEdQUkluZm86OnJldHVy
blZhbHVlR1BSIH07CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7IEdQUklu
Zm86OnJlZ1QwIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyByZXR1cm5WYWx1ZUpTUiB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIgfTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNS
IHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07CisjZW5kaWYKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgc3RhdGljX2Fzc2VydCghcmV0dXJuVmFsdWVKU1IudXNlcyhjYWxsRnJhbWVSZWdpc3Rl
cikpOworCisgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVHUFIgKHJldHVy
blZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQpLgorICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOworCisjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQorICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Cisg
ICAgcmV0KCk7CisjZWxzZQorICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1Yihv
cF9yZXRfaGFuZGxlckdlbmVyYXRvcikuY29kZSgpKTsKKyNlbmRpZgorfQorCisKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRl
Y29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJldHVyblZhbHVlSlNSKTsKIH0K
IAorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9w
Y29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MKQEAgLTYyLDEwICs5MiwxMiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIAogCiAgICAgaWYgKE9w
OjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCAr
IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSwgcmVnVDApOwotICAg
ICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAg
ICAgICBzdG9yZTMyVG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6
Om9mZnNldE9mQ2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkp
OworICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdG1wSlNSID0gcmV0dXJuVmFsdWVKU1I7
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgdG1wR1BSID0gdG1wSlNSLnBheWxvYWRHUFIoKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHRtcEpT
Uik7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbCh0bXBKU1IpOworICAgICAg
ICBsb2FkMzIoQWRkcmVzcyh0bXBKU1IucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCB0bXBHUFIpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YSh0bXBHUFIsIGJ5
dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRD
YWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNl
dE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAg
IH0KIApAQCAtNzMsNyArMTA1LDYgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoYXJnQ291bnRJbmNsdWRpbmdUaGlzKSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSkpOwogfQogCi0KIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogc3RkOjplbmFibGVf
aWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtODYsMjkgKzExNyw0OSBAQCBKSVQ6OmNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBjYWxsTGlua0luZgogICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLm1fZmly
c3RGcmVlLm9mZnNldCgpOyAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSB2aXJ0dWFsIHJlZ2lzdGVy
IGlmIHdlIG5ldmVyIHVzZSBpdCBhcyBvbmUuLi4KICAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQg
PSBieXRlY29kZS5tX2ZpcnN0VmFyQXJnOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudHMsIHJlZ1QxKTsKLSAgICBaX0pJVE9wZXJhdGlvbl9HSlpaIHNpemVPcGVyYXRpb247
Ci0gICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
Ci0gICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJn
dW1lbnRzOwotICAgIGVsc2UKLSAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVG
cmFtZUZvclZhcmFyZ3M7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3Rlciwg
Zmlyc3RWYXJBcmdPZmZzZXQpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdp
c3RlciksIHJlZ1QxKTsKLSAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1
ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CisgICAgeworICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFpfSklUT3BlcmF0aW9u
X0dKWlosIDA+KCk7CisgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBhcmd1bWVudHNKU1Ig
PSBwcmVmZXJyZWRBcmd1bWVudEpTUjxaX0pJVE9wZXJhdGlvbl9HSlpaLCAxPigpOworCisgICAg
ICAgIFpfSklUT3BlcmF0aW9uX0dKWlogc2l6ZU9wZXJhdGlvbjsKKyAgICAgICAgaWYgKE9wOjpv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAgICAgICAgICBz
aXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFt
ZUZvclZhcmFyZ3M7CisKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzSlNS
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBnbG9iYWxPYmplY3RHUFIs
IGFyZ3VtZW50c0pTUiwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKKyAg
ICAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCBy
ZWdUMSwgcmVnVDEpOworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdU
MSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCByZWdUMik7Ci0gICAgRl9KSVRPcGVyYXRpb25fR0ZKWlogc2V0dXBPcGVyYXRpb247
Ci0gICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
Ci0gICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRz
RnJhbWU7Ci0gICAgZWxzZQotICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVw
VmFyYXJnc0ZyYW1lOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgIGNhbGxPcGVy
YXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zm
c2V0LCByZWdUMCk7Ci0gICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOworI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMo
KSwgNiAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisj
ZW5kaWYKKworICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MgYXJndW1lbnRzSlNSIHsgcmVnVDIgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBhcmd1bWVudHNKU1IgeyByZWdUMywgcmVn
VDIgfTsKKyNlbmRpZgorCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRz
LCBhcmd1bWVudHNKU1IpOworICAgICAgICBGX0pJVE9wZXJhdGlvbl9HRkpaWiBzZXR1cE9wZXJh
dGlvbjsKKyAgICAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpCisgICAgICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9y
d2FyZEFyZ3VtZW50c0ZyYW1lOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXR1cE9wZXJh
dGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1Q0KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDQs
IHJlZ1QxLCBhcmd1bWVudHNKU1IsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlZ1Q1KTsKKyAgICB9CiAKICAgICAvLyBQcm9maWxlIHRo
ZSBhcmd1bWVudCBjb3VudC4KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUNSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKICAg
ICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCkpLCByZWdUMyk7CiAgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJv
dmUsIHJlZ1QzLCByZWdUMik7CkBAIC0xMTYsMTAgKzE2NywxMSBAQCBKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxs
TGlua0luZgogICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFs
aXplICd0aGlzJy4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWYWx1ZSwgcmVnVDAp
OwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAg
Y29uc3RleHByIEpTVmFsdWVSZWdzIHRoaXNKU1IgPSBjYWxsZWVKU1I7IC8vIFVzZWQgYXMgdGVt
cG9yYXJ5IHJlZ2lzdGVyCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHRo
aXNKU1IpOworICAgIHN0b3JlVmFsdWUodGhpc0pTUiwgQWRkcmVzcyhyZWdUNSwgQ2FsbEZyYW1l
Ojp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1Q1LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTM5LDcgKzE5MSw3IEBAIGJvb2wgSklU
Ojpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsK
ICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Mik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVKU1IpKTsKIAogICAgIGVtaXRQ
dXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIApAQCAtMTU4LDcgKzIxMCw3IEBAIHZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzCiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICog
c2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKLSAgICBsb2FkNjQoQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKKyAgICBsb2FkVmFsdWUoQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxlZUpTUik7CiAgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CiAgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmlu
Z0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CiAgICAgcmVzZXRTUCgpOwpAQCAtMTc4LDcgKzIz
MCw5IEBAIGJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNv
ZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxG
cmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+KCk7CiAgICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2Fy
Z2M7CiAgICAgc2h1ZmZsZURhdGEtPm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBzaHVmZmxlRGF0YS0+
bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyNlbmRpZgog
ICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHNodWZmbGVE
YXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwpAQCAtMTg4LDEyICsyNDIsMTkgQEAg
Ym9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5s
aW5rZWRDYWxsTGlua0luZm8qIGluZm8KICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAg
ICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZh
bHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxl
ZUpTUi5wYXlsb2FkR1BSKCksIERhdGFGb3JtYXRKUyk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVl
SlNSLnRhZ0dQUigpLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpKTsKKyNlbmRpZgogICAgIHNodWZm
bGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIGxvYWRDb25zdGFudChj
YWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdU
MiwgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIgPSByZWdUMjsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIGNhbGxM
aW5rSW5mb0dQUik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0
VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2Fs
bExpbmtJbmZvR1BSLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzaHVmZmxlciB7
ICp0aGlzLCAqc2h1ZmZsZURhdGEgfTsKKyAgICAgICAgc2h1ZmZsZXIubG9ja0dQUihjYWxsTGlu
a0luZm9HUFIpOworICAgICAgICBzaHVmZmxlci5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9
KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCkBAIC0yNDYsMjAgKzMwNywyNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZAogICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNh
bGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCi0gICAgc3RvcmU2NChyZWdUMCwg
QWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVKU1IpOworICAg
IHN0b3JlVmFsdWUoY2FsbGVlSlNSLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxs
RnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAKICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5
dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAv
LyBXZSBuZWVkIHRoaXMgb24gSlNWQUxVRTMyXzY0IG9ubHkgYXMgb24gSlNWQUxVRTY0IGEgcG9p
bnRlciBjb21wYXJpc29uIGluIHRoZSBEYXRhSUMgZmFzdAorICAgIC8vIHBhdGNoIGNhdGNoZXMg
dGhpcy4KKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoY2FsbGVlSlNSKSk7CisjZW5k
aWYKKwogICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5m
b0luZGV4LCBpbmZvQ29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBsb2FkQ29uc3Rh
bnQoaW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIgPSByZWdUMjsKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCBjYWxsTGlua0lu
Zm9HUFIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBz
bG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJ
bmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRH
UFIoKSwgY2FsbExpbmtJbmZvR1BSLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwotICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7Cisg
ICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KGNhbGxMaW5rSW5mb0dQUik7CiAgICAg
ICAgIH0pOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgICAgICBhdXRvIGRv
bmVMb2NhdGlvbiA9IGxhYmVsKCk7CkBAIC0yNjcsNyArMzM1LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0g
Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7Cisg
ICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhp
cywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSKTsKICAgICBhdXRvIGRv
bmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIApAQCAt
NDAzLDIwICs0NzEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JP
cGVuPihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwotICAgIC8vIGNhbGwgcmVzdWx0IChpdGVyYXRvcikgaXMgaW4gcmVn
VDAKKworICAgIC8vIGNhbGwgcmVzdWx0IChpdGVyYXRvcikgaXMgaW4gcmVnVDAgKHJlZ1QxL3Jl
Z1QwIG9yIDMyLWJpdCkKKworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0SlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm9HUFI7
CisgICAgc3RhdGljX2Fzc2VydCghcmV0dXJuVmFsdWVKU1IudXNlcyhzdHViSW5mb0dQUikpOwog
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0
OwotICAgIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgbW92ZShyZWdU
MCwgYmFzZUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZXR1cm5WYWx1ZUpTUik7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoaWRlbnQtPmltcGwoKSksIHJldHVyblZhbHVlSlNSLCByZXN1bHRKU1IsIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CkBAIC00MzAsOCArNDk4LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCiAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0SlNSKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVzdWx0SlNSKTsKIAog
ICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CkBAIC00NDMsMTAgKzUxMSwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93QwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1w
KCkpOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBHUFJSZWcgaXRlcmF0b3JH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgSlNWYWx1ZVJlZ3MgaXRl
cmF0b3JKU1IgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1I7CiAgICAgSnVtcExp
c3Qgbm90T2JqZWN0OwotICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJh
dG9yR1BSKSk7Ci0gICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRv
ckdQUikpOworICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9ySlNS
KSk7CisgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckpTUi5w
YXlsb2FkR1BSKCkpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
dGVyYXRvck9wZW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG5leHRWUmVnID0gYnl0ZWNvZGUu
bV9uZXh0OwpAQCAtNDU2LDEwICs1MjQsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0MKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIG1vdmUoaXRlcmF0
b3JHUFIsIGFyZ3VtZW50R1BSMik7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICB1
c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIGFyZzJKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0
aW9uLCAyPigpOworCisgICAgbW92ZVZhbHVlUmVncyhpdGVyYXRvckpTUiwgYXJnMkpTUik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxTbG93T3BlcmF0aW9uPigKKyAgICAgICAgYnl0ZWNvZGUs
CisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIG5leHRWUmVnLAorICAgICAgICBnbG9iYWxPYmpl
Y3RHUFIsIHN0dWJJbmZvR1BSLCBhcmcySlNSLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAogICAgIGF1dG8g
ZG9uZSA9IGp1bXAoKTsKQEAgLTQ4Myw4ICs1NjEsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAgICAgIH0KICAg
ICB9KSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIHJl
Z1QwKTsKLSAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShyZWdUMCk7Cisg
ICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBuZXh0
SlNSID0gYmFzZUpTUjsgLy8gVXNlZCBhcyB0ZW1wb3JhcnkgcmVnaXN0ZXIKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgbmV4dEpTUik7CisgICAgSnVtcCBnZW5l
cmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHkobmV4dEpTUik7CiAKICAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAg
IHNsb3dQYXRoQ2FsbC5jYWxsKCk7CkBAIC00OTYsMjQgKzU4MCwyMiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKICAgICBz
dG9yZThUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRh
OjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9m
ZnNldE9mU2Vlbk1vZGVzKCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGlu
c3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVj
a3BvaW50KCk7Ci0gICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkg
aW4gcmVnVDAKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxS
ZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7
Ci0gICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgIC8vIGNh
bGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwICAocmVnVDEvcmVn
VDAgb3IgMzItYml0KQorICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoc3R1
YkluZm9HUFIpKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBpdGVyQ2Fs
bFJlc3VsdEpTUiA9IGRvbnRDbG9iYmVySlNSOworICAgIG1vdmVWYWx1ZVJlZ3MocmV0dXJuVmFs
dWVKU1IsIGl0ZXJDYWxsUmVzdWx0SlNSKTsKKworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBk
b25lSlNSID0gcmVzdWx0SlNSOwogICAgIHsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOwotCi0gICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJldHVyblZhbHVlSlNSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdz
ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVz
ZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3Mu
c2V0KGl0ZXJDYWxsUmVzdWx0SlNSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
CiAgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+
ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiks
IHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5h
bWVzLT5kb25lLmltcGwoKSksIHJldHVyblZhbHVlSlNSLCBkb25lSlNSLCBzdHViSW5mb0dQUiwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwogICAgICAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CkBAIC01MjcsMjggKzYwOSwyNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbikKICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1Zh
bHVlUmVncyB7IGRvbmVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgZG9uZUpTUik7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kb25lLCBkb25lSlNSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsK
ICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQ
UiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
KGRvbmVKU1IsIGl0ZXJDYWxsUmVzdWx0SlNSKTsKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CiAgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGZhbHNlOwogICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7Ci0g
ICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbEdQUik7CisgICAgICAgIEp1
bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBkb25lSlNSLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAg
ICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOworICAgICAgICBtb3ZlVmFsdWVS
ZWdzKGl0ZXJDYWxsUmVzdWx0SlNSLCBiYXNlSlNSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKICAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgp
KSwgYmFzZUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
CiAKICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOwogICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkdldEJ5SWQ7CkBAIC01NjIsOCArNjQyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAgICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0SlNS
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1
bHRKU1IpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01
NzcsNyArNjU3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDCiAgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsK
IAotICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpkb250Q2xvYmJlckpTUjsKKworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBpdGVyQ2Fs
bFJlc3VsdEpTUiA9IGRvbnRDbG9iYmVySlNSOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CkBAIC01ODUsMjUgKzY2OCwzNCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93QwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVu
ZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRKU1IpKTsKIAogICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgp
OwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2Fs
bFJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0
KGl0ZXJDYWxsUmVzdWx0SlNSLnBheWxvYWRHUFIoKSkpOwogCi0gICAgICAgIG1vdmUoaXRlckNh
bGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKLSAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBkb25lVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKKyAgICAgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNs
b3dPcGVyYXRpb24sIDE+KCk7CisgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBhcmcySlNS
ID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKIAorICAgICAgICBt
b3ZlVmFsdWVSZWdzKGl0ZXJDYWxsUmVzdWx0SlNSLCBhcmcySlNSKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlPFNsb3dPcGVyYXRpb24+KAorICAgICAgICAgICAgYnl0ZWNv
ZGUsCisgICAgICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICAgICAgZG9uZVZSZWcsCisgICAgICAg
ICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBhcmcySlNSLAorICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGRvbmVWUmVnLCBkb25lR1BSKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBkb25lSlNSID0gcmVzdWx0SlNSOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGRvbmVWUmVnLCBkb25lSlNSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEpTUik7CiAgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRo
aXMpOwpAQCAtNjIwLDE1ICs3MTIsMjQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0MKIAogICAg
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBtb3ZlKGl0ZXJD
YWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOwotICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7Ci0gICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
KS5yYXdCaXRzKCkpOworICAgICAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8
U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFyZzJK
U1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAgICAg
IG1vdmVWYWx1ZVJlZ3MoaXRlckNhbGxSZXN1bHRKU1IsIGFyZzJKU1IpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KT4oCisgICAgICAgICAgICBieXRlY29kZSwKKyAgICAgICAgICAgIEFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAg
ICAgICB2YWx1ZVZSZWcsCisgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BS
LCBhcmcySlNSLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4N2Y5YjkwYTViZGYxMzdkN2Y4MWM5NGJhMWY5ZjZmMDgz
MDY5MzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNjM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhLCBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSNpbmNsdWRlICJKSVQuaCIKLQotI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIu
aCIKLSNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgotI2luY2x1ZGUgIk9wY29kZUlubGluZXMuaCIKLSNpbmNsdWRlICJSZXN1bHRU
eXBlLmgiCi0jaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKLSNpbmNsdWRlICJTbG93UGF0
aENhbGwuaCIKLSNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgotI2luY2x1ZGUgIlRodW5rR2Vu
ZXJhdG9ycy5oIgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdFB1dENhbGxS
ZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGVtaXRTdG9yZShkZXN0
aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVh
bFJlZ2lzdGVyKCksIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3JldChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0KLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEs
IHJlZ1QwKTsKLQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgcmV0
KCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxFdmFsPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgpOwotfQotIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0gICAgCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0gICAgCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BD
YWxsPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsPE9wVGFpbENhbGw+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgY29tcGlsZU9wQ2FsbDxPcENhbGxFdmFsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExp
bmtJbmZvSW5kZXgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsPE9w
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsPE9wVGFpbENhbGxW
YXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGw8T3BUYWls
Q2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKLX0KLSAgICAKLXZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wQ2Fs
bDxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKLX0KLSAgICAKLXZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGw8T3BDb25z
dHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotc3RkOjplbmFibGVfaWZfdDwKLSAgICBPcDo6b3Bjb2Rl
SUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFy
YXJncwotICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0sIHZvaWQ+Ci1KSVQ6
OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKLXsK
LSAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsK
LSAgICBpbnQgYXJnQ291bnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29k
ZSwgY2hlY2twb2ludCk7Ci0gICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGlu
dD4oc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsK
LQotICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKLSAgICAgICAgZW1pdExvYWQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsg
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCwgcmVnVDEp
OwotICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDAp
OwotICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0
YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVy
ZUlEKCkpOwotICAgICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgfQotCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ0NvdW50KSwgQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXN0ZDo6
ZW5hYmxlX2lmX3Q8Ci0gICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6
b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKLSAgICB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cwotLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykKLXsKLSAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IE9wOjpvcGNvZGVJRDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUu
bV90aGlzVmFsdWU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1f
YXJndW1lbnRzOwotICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLm1fZmlyc3RG
cmVlLm9mZnNldCgpOwotICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGJ5dGVjb2RlLm1fZmly
c3RWYXJBcmc7Ci0KLSAgICBlbWl0TG9hZChhcmd1bWVudHMsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
Wl9KSVRPcGVyYXRpb25fR0paWiBzaXplT3BlcmF0aW9uOwotICAgIGlmIChPcDo6b3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQotICAgICAgICBzaXplT3BlcmF0aW9u
ID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsKLSAgICBlbHNlCi0gICAg
ICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNh
bGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIC1maXJzdEZyZWVSZWdpc3RlciwgZmly
c3RWYXJBcmdPZmZzZXQpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3Rl
ciksIHJlZ1QxKTsKLSAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
UiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdu
bWVudEJ5dGVzKCksIDYgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwotICAgIGVtaXRMb2FkKGFyZ3VtZW50cywgcmVnVDIsIHJlZ1Q0KTsKLSAgICBGX0pJ
VE9wZXJhdGlvbl9HRkpaWiBzZXR1cE9wZXJhdGlvbjsKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQotICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9w
ZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwotICAgIGVsc2UKLSAgICAgICAgc2V0
dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0
aW9uKHNldHVwT3BlcmF0aW9uLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
cmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUNCksIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdU
MCk7Ci0gICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwotCi0gICAgLy8gUHJvZmlsZSB0
aGUgYXJndW1lbnQgY291bnQuCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFk
ZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1w
IG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMy
KHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsK
LSAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSAndGhp
cycuCi0gICAgZW1pdExvYWQodGhpc1ZhbHVlLCByZWdUMiwgcmVnVDApOwotICAgIHN0b3JlMzIo
cmVnVDAsIEFkZHJlc3MocmVnVDEsIFBheWxvYWRPZmZzZXQgKyAoQ2FsbEZyYW1lOjp0aGlzQXJn
dW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKSk7Ci0g
ICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMSwgVGFnT2Zmc2V0ICsgKENhbGxGcmFtZTo6
dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSkpOwotICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29u
c3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCi17Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0KLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwotCi0gICAgZW1pdFB1dENhbGxSZXN1bHQo
Ynl0ZWNvZGUpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsK
LSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBpbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7Ci0KLSAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAt
Ynl0ZWNvZGUubV9hcmd2OwotICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5t
X2NhbGxlZTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQotICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7Ci0KLSAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCi17
Ci0gICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0g
Y2FsbGVlRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKTsKLQotICAg
IC8qIENhbGxlciBhbHdheXM6Ci0gICAgICAgIC0gVXBkYXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0
byBjYWxsZWUgY2FsbEZyYW1lLgotICAgICAgICAtIEluaXRpYWxpemVzIEFyZ3VtZW50Q291bnQ7
IENhbGxlckZyYW1lOyBDYWxsZWUuCi0KLSAgICAgICBGb3IgYSBKUyBjYWxsOgotICAgICAgICAt
IENhbGxlZSBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgotICAgICAgICAtIENhbGxl
ZSByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBiZWZvcmUgcmV0dXJuLgotCi0gICAgICAgRm9y
IGEgbm9uLUpTIGNhbGw6Ci0gICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBD
b2RlQmxvY2suCi0gICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFm
dGVyIHJldHVybi4KLSAgICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0g
ICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fcHJvZmls
ZWRDb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkp
OwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKLSAgICAvLyBTUCBob2xk
cyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRD
b3VudCBpbml0aWFsaXplZC4KLSAgICAKLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKLSAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKLSAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1Qx
LCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWUuCi0KLSAgICBzdG9yZTMyKHJl
Z1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpKTsKLQotICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNv
ZGVJRCksIHJlZ1QwKTsKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9
PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChD
YWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMSkpOwotCi0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
LSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cykgewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KCp0aGlzLCByZWdUMCwgWyZdIHsKLSAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKLSAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwotICAgICAgICB9
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKLSAgICAgICAgYXV0byBkb25lTG9j
YXRpb24gPSBsYWJlbCgpOwotICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCBy
ZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7Ci0gICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGhzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0KLSAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29k
ZSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKLXsKLSAg
ICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKLQotICAgIGlmIChvcGNvZGVJRCA9
PSBvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoaW5zdHJ1
Y3Rpb24sIGl0ZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKLSAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsK
LQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKSB7Ci0gICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
KQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+
KCk7Ci0gICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7Ci0gICAgICAgIHN3aXRj
aCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKLSAgICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBp
dGVyYXRvcl9vcGVuX3RyeV9mYXN0X25hcnJvdzsKLSAgICAgICAgY2FzZSBXaWRlMTY6IHJldHVy
biBpdGVyYXRvcl9vcGVuX3RyeV9mYXN0X3dpZGUxNjsKLSAgICAgICAgY2FzZSBXaWRlMzI6IHJl
dHVybiBpdGVyYXRvcl9vcGVuX3RyeV9mYXN0X3dpZGUzMjsKLSAgICAgICAgZGVmYXVsdDogUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0pKCk7Ci0KLSAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVu
Y3Rpb24pOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci0gICAgSnVtcCBmYXN0Q2FzZSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKLQotICAgIGNv
bXBpbGVPcENhbGw8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwotCi0gICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKLSAgICAKLSAgICAvLyBj
YWxsIHJlc3VsdCAoaXRlcmF0b3IpIGlzIGluIHJlZ1QxICh0YWcpL3JlZ1QwIChwYXlsb2FkKQot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsK
LSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwotCi0gICAgR1BS
UmVnIHRhZ0l0ZXJhdG9yR1BSID0gcmVnVDE7Ci0gICAgR1BSUmVnIHBheWxvYWRJdGVyYXRvckdQ
UiA9IHJlZ1QwOwotCi0gICAgR1BSUmVnIHRhZ05leHRHUFIgPSB0YWdJdGVyYXRvckdQUjsKLSAg
ICBHUFJSZWcgcGF5bG9hZE5leHRHUFIgPSBwYXlsb2FkSXRlcmF0b3JHUFI7Ci0KLSAgICBKU1Zh
bHVlUmVncyBuZXh0UmVncyA9IEpTVmFsdWVSZWdzKHRhZ05leHRHUFIsIHBheWxvYWROZXh0R1BS
KTsKLQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLAotICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKLSAgICAgICAgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3ModGFnSXRlcmF0b3JHUFIsIHBheWxvYWRJdGVyYXRvckdQUiksCi0gICAgICAgIG5leHRSZWdz
LAotICAgICAgICBJbnZhbGlkR1BSUmVnLAotICAgICAgICBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
LSAgICAKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgbmV4dFJlZ3MpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBuZXh0UmVncyk7Ci0KLSAgICBmYXN0Q2Fz
ZS5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwotICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1w
KCkpOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyB0YWdJdGVy
YXRvckdQUiA9IHJlZ1QxOwotICAgIEdQUlJlZyBwYXlsb2FkSXRlcmF0b3JHUFIgPSByZWdUMDsK
LQotICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbCh0YWdJdGVyYXRvckdQUikpOwotICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RPYmplY3QocGF5bG9hZEl0ZXJhdG9yR1BSKSk7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBuZXh0
VlJlZyA9IGJ5dGVjb2RlLm1fbmV4dDsKLSAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2
bSgpLnByb3BlcnR5TmFtZXMtPm5leHQuaW1wbCgpOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZSgKLSAgICAgICAgYnl0ZWNvZGUsCi0gICAgICAgIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgLy8gb3BlcmF0aW9uCi0gICAgICAgIG5leHRWUmVnLCAvLyByZXN1bHQKLSAgICAg
ICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8v
IGFyZzEKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKLSAgICAgICAgSlNWYWx1ZVJl
Z3ModGFnSXRlcmF0b3JHUFIsIHBheWxvYWRJdGVyYXRvckdQUiksIC8vIGFyZzMKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsgLy8gYXJnNAotICAgIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgYXV0byBkb25lID0ganVtcCgpOwotCi0gICAgbm90T2Jq
ZWN0LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9y
UmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAg
ICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKLSAgICAgICAgc3dpdGNoIChpbnN0
cnVjdGlvbi0+d2lkdGgoKSkgewotICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9y
X25leHRfdHJ5X2Zhc3RfbmFycm93OwotICAgICAgICBjYXNlIFdpZGUxNjogcmV0dXJuIGl0ZXJh
dG9yX25leHRfdHJ5X2Zhc3Rfd2lkZTE2OwotICAgICAgICBjYXNlIFdpZGUzMjogcmV0dXJuIGl0
ZXJhdG9yX25leHRfdHJ5X2Zhc3Rfd2lkZTMyOwotICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfSkoKTsKLQotICAgIEpTVmFsdWVS
ZWdzIG5leHRSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQsIG5leHRSZWdzKTsKLSAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNo
SWZOb3RFbXB0eShuZXh0UmVncyk7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwotICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7Ci0gICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0
aW9uTW9kZTo6R2VuZXJpYykpKTsKLQotICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAg
bG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRP
ZlNlZW5Nb2RlcygpLCByZWdUMCk7Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7Ci0gICAgc3RvcmU4VG9N
ZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNl
ZW5Nb2RlcygpKTsKLSAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlv
biwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLSAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
OwotICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1Qx
LCByZWdUMAotCi0gICAgR1BSUmVnIHRhZ1ZhbHVlR1BSID0gcmVnVDE7Ci0gICAgR1BSUmVnIHBh
eWxvYWRWYWx1ZUdQUiA9IHJlZ1QwOwotICAgICAgICAKLSAgICBHUFJSZWcgdGFnRG9uZUdQUiA9
IHJlZ1Q1OwotICAgIEdQUlJlZyBwYXlsb2FkRG9uZUdQUiA9IHJlZ1Q0OwotCi0gICAgewotICAg
ICAgICBKU1ZhbHVlUmVncyBkb25lUmVncyA9IEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxv
YWREb25lR1BSKTsKLQotICAgICAgICBHUFJSZWcgdGFnSXRlclJlc3VsdEdQUiA9IHJlZ1QzOwot
ICAgICAgICBHUFJSZWcgcGF5bG9hZEl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKLSAgICAgICAgCi0g
ICAgICAgIC8vIGl0ZXJSZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0
IGJ5IGlkIGJlbG93LgotICAgICAgICBtb3ZlKHJlZ1QxLCB0YWdJdGVyUmVzdWx0R1BSKTsKLSAg
ICAgICAgbW92ZShyZWdUMCwgcGF5bG9hZEl0ZXJSZXN1bHRHUFIpOwotCi0gICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0YWdJdGVyUmVzdWx0R1BSKTsKLQotICAgICAgICBSZWdp
c3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh0YWdWYWx1ZUdQUik7Ci0gICAgICAg
IHByZXNlcnZlZFJlZ3MuYWRkKHBheWxvYWRWYWx1ZUdQUik7Ci0gICAgICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywKLSAgICAgICAg
ICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAotICAgICAgICAgICAgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLAotICAgICAgICAgICAgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLAotICAgICAgICAgICAgcHJlc2VydmVkUmVncywKLSAgICAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
dm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksCi0gICAgICAgICAgICBKU1ZhbHVlUmVn
cyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksCi0gICAgICAgICAgICBk
b25lUmVncywKLSAgICAgICAgICAgIEludmFsaWRHUFJSZWcsCi0gICAgICAgICAgICBBY2Nlc3NU
eXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwotCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IGRvbmVSZWdzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rv
bmUsIGRvbmVSZWdzKTsKLSAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKLSAgICB9
Ci0KLSAgICB7Ci0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyh0
YWdWYWx1ZUdQUiwgcGF5bG9hZFZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHRhZ0l0ZXJSZXN1
bHRHUFIgPSByZWdUMTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWRJdGVyUmVzdWx0R1BSID0gcmVn
VDA7Ci0KLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDY7Ci0gICAgICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1Q3OwotICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0g
YnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModGFnRG9uZUdQUiwgcGF5bG9hZERvbmVH
UFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
OwotCi0gICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywKLSAgICAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAotICAgICAg
ICAgICAgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICAgICAgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLAotICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnBy
b3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJ
dGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksCi0gICAgICAgICAgICByZXN1bHRS
ZWdzLAotICAgICAgICAgICAgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAgIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7Ci0KLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0UmVncyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgcmVzdWx0UmVncyk7Ci0KLSAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwotICAg
IH0KLQotICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wSXRlcmF0b3JOZXh0PigpOwotICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRv
bmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcgdGFnVmFsdWVHUFIgPSBy
ZWdUMTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWRWYWx1ZUdQUiA9IHJlZ1QwOwotICAgICAgICAg
ICAgCi0gICAgICAgIEdQUlJlZyB0YWdJdGVyUmVzdWx0R1BSID0gcmVnVDM7Ci0gICAgICAgIEdQ
UlJlZyBwYXlsb2FkSXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgICAgICAKLSAgICAgICAgR1BS
UmVnIHRhZ0RvbmVHUFIgPSByZWdUNTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWREb25lR1BSID0g
cmVnVDQ7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAgICAgSnVtcExp
c3Qgbm90T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh0
YWdJdGVyUmVzdWx0R1BSKSk7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RP
YmplY3QocGF5bG9hZEl0ZXJSZXN1bHRHUFIpKTsKLQotICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwotICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAg
ICAgICAKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICAgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAgYnl0ZWNv
ZGUsCi0gICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgot
ICAgICAgICAgICAgZG9uZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0
cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKLSAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJ
dGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKLSAgICAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQp
LnJhd0JpdHMoKSk7IC8vIGFyZzQKLQotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVW
UmVnLCBKU1ZhbHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9uZUdQUikpOwotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIEpTVmFsdWVSZWdzKHRhZ1Zh
bHVlR1BSLCBwYXlsb2FkVmFsdWVHUFIpKTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KGp1bXAoKSk7Ci0KLSAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0
LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Ci0g
ICAgfQotCi0gICAgeyAgIAotICAgICAgICBHUFJSZWcgdGFnSXRlclJlc3VsdEdQUiA9IHJlZ1Qx
OwotICAgICAgICBHUFJSZWcgcGF5bG9hZEl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKLQotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVW
UmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLQotICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRl
bnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKLSAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLQotICAgICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgICAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoCi0gICAgICAgICAgICBieXRlY29kZSwKLSAgICAgICAg
ICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCi0gICAgICAgICAgICB2
YWx1ZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKLSAgICAgICAgICAgIGdlbi5zdHVi
SW5mbygpLCAvLyBhcmcyCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0R1BS
LCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKLSAgICAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7
IC8vIGFyZzQKLQotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBVU0Uo
SlNWQUxVRTMyXzY0KQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCmluZGV4IDY2YmM2Nzc4Njg2MmMxMWM3MTdjODBlZWMzOGUxYmIyNTg5OTY5YmEu
LjhlNGNlMDNmOGVlZWMzNDBiYjY2NmY1Mjc5YTY4NzZkYzJjNjg4NjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5oCkBAIC0xNjIsMTIgKzE2Miw4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewotI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGppdFR5
cGUpOwotI2VuZGlmCiAgICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VEYXRhSUNJbk9w
dGltaXppbmdKSVQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKaW5kZXggMWYzNGMzZDFkY2ZmNTJlMDZhMjgyMTU3MTE4
MmY5MmZmZmU4YzAyMS4uYmRhNTFhNDhkODA3NGQ0ZjZkMmJjM2ExOWEwYzc4NTlmZjE3MDNhNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKICNpbmNsdWRlICJKSVQuaCIKKyNpbmNsdWRlICJKSVRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCiAKQEAgLTEyOCwxNiArMTI5LDE0IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRv
cjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogICAgIGdlbmVyYXRlRmFz
dENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5n
dGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQog
Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkSW5saW5l
QWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNlLCBHUFJSZWcg
c2NyYXRjaCwgR1BSUmVnIHJlc3VsdCkKK3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZElubGlu
ZUFjY2VzcyhKSVQmIGppdCwgR1BSUmVnIHN0dWJJbmZvR1BSLCBKU1ZhbHVlUmVncyBiYXNlSlNS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSKQogewogICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKIAotICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAg
IGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOwotICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgaml0LmxvYWRQ
cm9wZXJ0eShiYXNlLCBzY3JhdGNoLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBqaXQu
bG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlSlNSLnBheWxvYWRHUFIoKSwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgYXV0byBza2lwSW5saW5l
QWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBqaXQubG9hZFByb3BlcnR5KGJh
c2VKU1IucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSLCByZXN1bHRKU1IpOwogICAgIGF1dG8gZmlu
aXNoZWQgPSBqaXQuanVtcCgpOwogCiAgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOwpA
QCAtMTUyLDEyICsxNTEsMTUgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWIKIAogICAgIG1fc3Rh
cnQgPSBqaXQubGFiZWwoKTsKIAorICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZUpTUjsKKyAgICB1c2luZyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUjsK
KyAgICB1c2luZyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2hHUFI7CisKICAgICBq
aXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7Ci0gICAgZ2VuZXJhdGVHZXRC
eUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGpp
dCwgc3R1YkluZm9HUFIsIGJhc2VKU1IsIHNjcmF0Y2hHUFIsIHJlc3VsdEpTUik7CiAKICAgICBt
X2RvbmUgPSBqaXQubGFiZWwoKTsKIH0KLSNlbmRpZgogCiBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLApAQCAtMTc3LDE5
ICsxNzksMjEgQEAgdm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJ
bmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAotI2lmIFVTRShKU1ZB
TFVFNjQpCiB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJ
bmZvR1BSKQogewogICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5
cGUpKTsKIAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKIAorICAgIHVzaW5nIEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0
QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNjcmF0Y2hHUFI7CisKICAgICBqaXQubG9hZENvbnN0YW50
KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7Ci0gICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNz
KGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNl
LCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5l
QWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIGJhc2VKU1IsIHNjcmF0Y2hHUFIsIHJlc3VsdEpTUik7
CiAKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKIH0KLSNlbmRpZgogCiBKSVRQdXRCeUlkR2Vu
ZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZp
ZXIsCkBAIC0yMDIsNyArMjA2LDYgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdl
bmVyYXRvcigKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0Y2gpOwog
fQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BS
UmVnIHN0dWJJbmZvR1BSKQogewogICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKTsKQEAgLTIxMSwxNyArMjE0LDE1IEBAIHZvaWQgSklUUHV0QnlJZEdlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBz
dHViCiAKICAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CiAKLSAg
ICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBHUFJS
ZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKLSAgICBHUFJS
ZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gyOwotICAgIEdQ
UlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgdXNpbmcg
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0
QnlJZFJlZ2lzdGVyczo6dmFsdWVKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVQdXRCeUlkUmVnaXN0
ZXJzOjpzY3JhdGNoR1BSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2Ny
YXRjaDJHUFI7CiAKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0KLSAgICBqaXQu
bG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoKTsKLSAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKCkpKTsKLSAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNj
cmF0Y2gpOwotICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgYmFz
ZSwgc2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VKU1IucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgIGppdC5zdG9yZVByb3BlcnR5KHZhbHVlSlNSLCBiYXNlSlNSLnBheWxvYWRH
UFIoKSwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwogICAgIGF1dG8gZmluaXNoZWQgPSBqaXQu
anVtcCgpOwogCiAgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOwpAQCAtMjMwLDcgKzIz
MSw2IEBAIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViCiAgICAgZmluaXNoZWQubGluaygmaml0KTsK
ICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKIH0KLSNlbmRpZgogCiB2b2lkIEpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKIHsKQEAgLTM4
Myw3ICszODMsNiBAQCB2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYgaml0KQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFj
Y2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkK
IHZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
SklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOwpAQCAtMzkyLDE1
ICszOTEsMTUgQEAgdm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkkKIAogICAgIGppdC5sb2FkQ29uc3Rh
bnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKIAotICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6c2NyYXRjaDsKKyAgICB1c2luZyBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFz
ZUpTUjsKKyAgICB1c2luZyBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNSOworICAg
IHVzaW5nIEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzY3JhdGNoR1BSOwogCiAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBkb25lOwogCi0gICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAg
YXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7Ci0gICAgaml0
LmJveEJvb2xlYW4odHJ1ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUpTUi5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGF1dG8gc2tpcElubGluZUFjY2Vz
cyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5ib3hCb29sZWFuKHRydWUs
IHJlc3VsdEpTUik7CiAgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CiAKICAgICBza2lw
SW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CkBAIC00MDksNyArNDA4LDYgQEAgdm9pZCBKSVRJbkJ5
SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5z
aWduZWQgc3R1YkkKICAgICBmaW5pc2hlZC5saW5rKCZqaXQpOwogICAgIG1fZG9uZSA9IGppdC5s
YWJlbCgpOwogfQotI2VuZGlmCiAKIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OkpJVEluc3RhbmNl
T2ZHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgK
aW5kZXggMmY2OWY2NGVjMTYxYWU5MDQzZTRkYzg2MGMzODQ5NjQ5MTljNmFkZS4uZWJkZTQyNGNh
NmQ0YWQ2N2ViZjk0OTYxNzdiMGVmZWM3ZjY4ZGYyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtNDYsMTEyICs0Niwx
OTUgQEAgc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiBlbnVtIGNsYXNzIEFjY2Vz
c1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCituYW1lc3Bh
Y2UgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLXN0cnVj
dCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1QzOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSBHUFJJbmZvOjpyZWdUMjsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMg
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKLX07Ci0KLXN0
cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mbyA9IEdQUkluZm86OnJlZ1QyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2ggPSBHUFJJbmZvOjpyZWdUMzsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRC
eVZhbFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUklu
Zm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5m
bzo6cmVnVDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMjsKLSAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFu
ZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgotICAgIHN0
YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5KTsKLSAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQpOwotICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Ci19OwotCi1zdHJ1Y3QgQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJ
bmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMjsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUklu
Zm86OmFyZ3VtZW50R1BSMzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOwotfTsKLQotc3RydWN0IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6
cmVnVDE7Ci0gICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OmJhc2UpOwotICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHkpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvID0gR1BSSW5mbzo6cmVnVDI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IEdQUkluZm86OnJlZ1QzOwotfTsKLQotc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
cyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGRvbnRDbG9iYmVyUmVnaXN0ZXIgPSBHUFJJbmZvOjpyZWdU
MzsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOwotfTsKLQotc3RydWN0IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwotfTsKLQotc3RydWN0IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVn
VDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsK
LX07Ci0KLXN0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OwotfTsKLQotc3RydWN0IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BS
SW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmQgPSBHUFJJbmZv
OjpyZWdUMTsKLSAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZSk7Ci0gICAgc3RhdGljX2Fzc2VydChicmFuZCA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eSk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMjsKLX07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7
IEdQUkluZm86OnJlZ1QxIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1IgeyBH
UFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IHByb3Bl
cnR5SlNSIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDMg
fTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1QyIH07CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJ
bmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9w
ZXJ0eUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpT
VmFsdWVSZWdzIHJlc3VsdEpTUiB7IHByb3BlcnR5SlNSIH07Citjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDcgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQ
UiB7IEdQUkluZm86OnJlZ1Q2IH07CiAjZW5kaWYKK30KKworbmFtZXNwYWNlIEJhc2VsaW5lRGVs
QnlJZFJlZ2lzdGVycyB7CisjaWYgVVNFKEpTVkFMVUU2NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1
bHRKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7
IEdQUkluZm86OnJlZ1QzIH07Citjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgeyBHUFJJbmZv
OjpyZWdUMiB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDMsIEdQUkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIg
SlNWYWx1ZVJlZ3MgcmVzdWx0SlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07
Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDcgfTsKK2NvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1Q2IH07CisjZW5kaWYKK30KKwor
bmFtZXNwYWNlIEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgeworI2lmIFVTRShKU1ZBTFVFNjQp
Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07Citjb25z
dGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1IgeyBHUFJJbmZvOjpyZWdUMSB9OworY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IGJhc2VKU1IgfTsKK2NvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMiB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
R1BSIHsgR1BSSW5mbzo6cmVnVDMgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCitjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9
OworY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNSIHsgR1BSSW5mbzo6cmVnVDMsIEdQ
UkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSIHsgYmFzZUpT
UiB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OnJlZ1Q3IH07Citj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgeyBHUFJJbmZvOjpyZWdUNiB9OworI2VuZGlmCit9
CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorbmFtZXNwYWNlIEJhc2VsaW5lRW51bWVyYXRvckdldEJ5
VmFsUmVnaXN0ZXJzIHsKK3N0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQ
UkluZm86OnJlZ1QwIH07CitzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNS
IHsgR1BSSW5mbzo6cmVnVDEgfTsKK3N0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0
SlNSIHsgR1BSSW5mbzo6cmVnVDAgfTsKK3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gR1BSSW5mbzo6cmVnVDI7CisvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEg
Q29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJ
bmZvLgorc3RhdGljX2Fzc2VydChiYXNlSlNSID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2VKU1IpOworc3RhdGljX2Fzc2VydChwcm9wZXJ0eUpTUiA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUik7CitzdGF0aWNfYXNzZXJ0KHJlc3VsdEpTUiA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHRKU1IpOworc3RhdGljX2Fzc2VydChzdHViSW5m
b0dQUiA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mb0dQUik7CisKK3N0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CitzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0Oworc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK30KKyNlbmRpZgorCituYW1lc3Bh
Y2UgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29u
c3RleHByIEdQUlJlZyByZXN1bHQgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEdQUlJl
ZyB2YWx1ZSB7IEdQUkluZm86OmFyZ3VtZW50R1BSMiB9OworY29uc3RleHByIEdQUlJlZyBwcm90
byB7IEdQUkluZm86OmFyZ3VtZW50R1BSMyB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyB7
IEdQUkluZm86OmFyZ3VtZW50R1BSMSB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSB7IEdQ
UkluZm86Om5vbkFyZ0dQUjAgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgeyBHUFJJbmZv
Ojpub25BcmdHUFIxIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHZh
bHVlSlNSICB7IEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5mbzo6YXJndW1lbnRHUFIyIH07
Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvdG9KU1IgIHsgR1BSSW5mbzo6cmVnVDUsIEdQUklu
Zm86OnJlZ1Q0IH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVn
VDEgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDFHUFIgeyBHUFJJbmZvOjpyZWdUNiB9Owor
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMkdQUiB7IEdQUkluZm86OnJlZ1Q3IH07CitzdGF0aWNf
YXNzZXJ0KCF2YWx1ZUpTUi51c2VzKHJlc3VsdEdQUikpOworc3RhdGljX2Fzc2VydCghdmFsdWVK
U1Iub3ZlcmxhcHMocHJvdG9KU1IpKTsKK3N0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoc3R1
YkluZm9HUFIpKTsKK3N0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoc2NyYXRjaDFHUFIpKTsK
K3N0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoc2NyYXRjaDJHUFIpKTsKKyNlbmRpZgorfQor
CituYW1lc3BhY2UgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworY29u
c3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsKK2NvbnN0
ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRKU1IgeyBiYXNlSlNSIH07Citjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aEdQUiB7IEdQUkluZm86OnJlZ1QzIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3Rl
eHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAg
fTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiAgeyBHUFJJbmZvOjpyZWdUMywg
R1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRKU1IgeyBiYXNl
SlNSIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDcgfTsK
K2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1Q2IH07CisjZW5kaWYK
K3N0YXRpY19hc3NlcnQoYmFzZUpTUiA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
SlNSKTsKK3N0YXRpY19hc3NlcnQocHJvcGVydHlKU1IgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHlKU1IpOworfQorCituYW1lc3BhY2UgQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1Ig
eyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IGJh
c2VKU1IgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMSB9
OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSIHsgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0
ZXhwciBKU1ZhbHVlUmVncyBkb250Q2xvYmJlckpTUiB7IEdQUkluZm86OnJlZ1QzIH07CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJ
bmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1
bHRKU1IgeyBiYXNlSlNSIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5m
bzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1Qz
IH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgZG9udENsb2JiZXJKU1IgeyBHUFJJbmZvOjpyZWdU
NiwgR1BSSW5mbzo6cmVnVDcgfTsKKyNlbmRpZgorfQorCituYW1lc3BhY2UgQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnMgeworI2lmIFVTRShKU1ZBTFVFNjQpCitjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MgcmVzdWx0SlNSIHsgYmFzZUpTUiB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHRoaXNKU1Ig
eyBHUFJJbmZvOjpyZWdUMSB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUklu
Zm86OnJlZ1QyIH07Citjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgeyBHUFJJbmZvOjpyZWdU
MyB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNl
SlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1
ZVJlZ3MgcmVzdWx0SlNSIHsgYmFzZUpTUiB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHRoaXNK
U1IgeyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUNyB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
R1BSIHsgR1BSSW5mbzo6cmVnVDYgfTsKKyNlbmRpZgorfQorCituYW1lc3BhY2UgQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnMgeworY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1
bHRKU1IgeyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUiB9OworY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiB7IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm9H
UFIgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c2NyYXRjaEdQUiB9OworfQorCituYW1lc3BhY2UgQmFzZWxpbmVQdXRCeUlkUmVnaXN0
ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1Ig
eyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSIHsgR1BS
SW5mbzo6cmVnVDEgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpy
ZWdUMyB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSIHsgR1BSSW5mbzo6cmVnVDIgfTsK
K2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDJHUFIgeyBHUFJJbmZvOjpyZWdUNCB9OworI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsgR1BSSW5m
bzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWVK
U1IgeyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUNyB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
R1BSIHsgR1BSSW5mbzo6cmVnVDYgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDJHUFIgeyBH
UFJJbmZvOjpyZWdUNCB9OworI2VuZGlmCit9CisKK25hbWVzcGFjZSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJh
c2VKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5
SlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiB7
IEdQUkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5m
bzo6cmVnVDQgfTsKK2NvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiB7IEdQUkluZm86OnJlZ1Qz
IH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VK
U1IgeyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKK2NvbnN0ZXhwciBKU1ZhbHVl
UmVncyBwcm9wZXJ0eUpTUiB7IEdQUkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdUMiB9OworY29u
c3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSIHsgR1BSSW5mbzo6cmVnVDYsIEdQUkluZm86OnJl
Z1Q3IH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDQgfTsK
K2NvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiB7IEdQUkluZm86OnJlZ1Q1IH07CisjZW5kaWYK
K30KKworbmFtZXNwYWNlIEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdU
MCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIGJyYW5kSlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsK
K2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMiB9OworI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsgR1BSSW5m
bzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYnJhbmRK
U1IgeyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUNyB9OworI2VuZGlmCitzdGF0aWNfYXNzZXJ0KGJh
c2VKU1IgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUik7CitzdGF0aWNfYXNz
ZXJ0KGJyYW5kSlNSID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSKTsK
K30KIAogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAppbmRleCBlOGU1Nzg4ODQyMTg4ZTY4NTc1NzZi
ZGI2ZWMzMjZhOWFmZjhjZDlhLi5kNjAyZmM5MjZjOTMyOWUyMTJhNGQ1MDdmZDg2ZDA3OGFiYTdi
YTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtNjQzLDYgKzY0
MywxNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoUmVnaXN0ZXJJRCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZykp
OwogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoSlNWYWx1ZVJlZ3MgcmVnKQoreworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWcpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKEpTVmFsdWVSZWdzIGpzUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKK3sKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHZSZWcpKQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoanNSZWcpOworfQorCiBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBpbnQgdGFyZ2V0KQogewogICAgIGlmICh0YXJnZXQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCAxYzQ0ZmRlZmQ4
NWM5YWU4YmUxODRjOTg0Y2YxYzcwZTMzZjNhNzBjLi44ZDU1YzFjNmJlYzE1NWUyZmI5MjlkMDZl
N2MwODE3MGMzYzA1NWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKQEAgLTM3MSwyNiArMzcxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBBU1NFUlQoY2FsbEZyYW1lUmVnaXN0ZXIgIT0g
cmVnVDEpOwotICAgIEFTU0VSVChyZWdUMSAhPSByZXR1cm5WYWx1ZUdQUik7Ci0gICAgQVNTRVJU
KHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLQotICAgIC8vIFJldHVybiB0
aGUgcmVzdWx0IGluICVlYXguCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZXR1cm5WYWx1ZUdQUik7Ci0KLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICByZXQoKTsKLSNlbHNlCi0g
ICAgZW1pdE5ha2VkTmVhckp1bXAodm0oKS5nZXRDVElTdHViKG9wX3JldF9oYW5kbGVyR2VuZXJh
dG9yKS5jb2RlKCkpOwotI2VuZGlmCi19Ci0KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxl
ckdlbmVyYXRvcihWTSYpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKaW5kZXggYTJiZjZlYjNmNzU0ZWIxYTE3Y2RjNzYzMzUwNzkzOWQzMTlhYmQz
Ni4uYjRlODBlNWY2ZDVhNDk4MzcyMTBhN2JkZDVjNjY4MTk1NDhlMzNmNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMTUyLDI4ICsxNTIs
NDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7
CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1
c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJz
dCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0TG9hZFBh
eWxvYWQodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZFBheWxvYWQocHJvdG8sIHJlZ1QxKTsK
KyAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdEdQUjsKKyAgICB1
c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlSlNSOworICAgIHVzaW5nIEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9KU1I7CisgICAgdXNpbmcgQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKyAgICB1c2luZyBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxR1BSOworICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c2NyYXRjaDJHUFI7CisKKyAgICBlbWl0TG9hZFBheWxvYWQodmFsdWUsIHZh
bHVlSlNSLnBheWxvYWRHUFIoKSk7CisgICAgZW1pdExvYWRQYXlsb2FkKHByb3RvLCBwcm90b0pT
Ui5wYXlsb2FkR1BSKCkpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJh
c2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBm
b3IgU3ltYm9sLmhhc0luc3RhbmNlLgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2
YWx1ZSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvKTsKICAgICAKICAg
ICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFs
dWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIEludmFsaWRHUFJSZWcsCi0gICAg
ICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgcmVz
dWx0R1BSLAorICAgICAgICB2YWx1ZUpTUi5wYXlsb2FkR1BSKCksCisgICAgICAgIHByb3RvSlNS
LnBheWxvYWRHUFIoKSwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIHNjcmF0Y2gxR1BS
LCBzY3JhdGNoMkdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0
YW5jZU9mcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDAp
OworICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTIsMTIgKzIw
NSwzMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90
byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107Ci0gICAgCisKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZSwg
cmVnVDApOwotICAgIGVtaXRMb2FkVGFnKHByb3RvLCByZWdUMyk7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIGRzdCwgbV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhy
ZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDEpKTsKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgdXNpbmcgU2xvd09wZXJh
dGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3Bl
cmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJy
ZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIHVzaW5nIEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6dmFsdWVKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjpwcm90b0pTUjsKKyAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlSlNSID09IHByZWZl
cnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCkpOworICAgIC8vIFByb3RvIHdpbGwg
YmUgcGFzc2VkIG9uIHN0YWNrLCBqdXN0IG1ha2Ugc3VyZSBubyBvdmVybGFwCisgICAgc3RhdGlj
X2Fzc2VydCghcHJvdG9KU1IudXNlcyhnbG9iYWxPYmplY3RHUFIpKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KCFwcm90b0pTUi51c2VzKHN0dWJJbmZvR1BSKSk7CisgICAgc3RhdGljX2Fzc2VydCghdmFs
dWVKU1IudXNlcyhnbG9iYWxPYmplY3RHUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCF2YWx1ZUpT
Ui51c2VzKHN0dWJJbmZvR1BSKSk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdExvYWRUYWcodmFsdWUsIHZhbHVlSlNSLnRhZ0dQ
UigpKTsKKyAgICBlbWl0TG9hZFRhZyhwcm90bywgcHJvdG9KU1IudGFnR1BSKCkpOworICAgIGNh
bGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGRz
dCwKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgdmFsdWVKU1IsIHByb3Rv
SlNSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAppbmRleCBmZmRiOTdlNDYzOTc5NDUzZDAwZGU3NmFkMDg3MzgwODZhM2U4N2FkLi4z
N2M5MmEyOGMzZjdmYjVhZDE0NzM3NGJlMzIxZTNkMGVhOTEwYzYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNDQsNyArNDQsNiBA
QAogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
LSNpZiBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC01MywyOSArNTIsMjggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICB1
c2luZyBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdEpTUjsKKyAgICB1c2luZyBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mb0dQUjsKKyAgICB1c2luZyBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpzY3JhdGNoR1BSOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUpTUik7CiAKICAgICBpZiAoYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+
IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAg
YXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOwotICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUpTUik7CisgICAgICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUpTUi5wYXlsb2Fk
R1BSKCksIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CiAgICAgICAg
IGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VKU1IsIHByb3Bl
cnR5SlNSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7Ci0KLSAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlKTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlSlNS
LnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3IgZ2VuKAogICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworICAgICAgICAgICAgYmFzZUpTUiwg
cHJvcGVydHlKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIpOwogCiAgICAgICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKQEAgLTkzLDE5ICs5MSwxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEpTUik7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRKU1IpOwogICAgIH0KIH0KIAotI2lmICFPUyhXSU5ET1dTKQot
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1lbnRHUFI0ID0gR1BSSW5mbzo6YXJn
dW1lbnRHUFI0Owotc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1lbnRHUFI1ID0g
R1BSSW5mbzo6YXJndW1lbnRHUFI1OwotI2Vsc2UKLXN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZp
YWJsZUFyZ3VtZW50R1BSNCA9IEdQUkluZm86Om5vbkFyZ0dQUjA7Ci1zdGF0aWMgY29uc3RleHBy
IEdQUlJlZyB2aWFibGVBcmd1bWVudEdQUjUgPSBHUFJJbmZvOjpub25BcmdHUFIxOwotI2VuZGlm
Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRC
eVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewpAQCAtMTIxLDEzICsxMTEsMjQgQEAgdm9pZCBKSVQ6
OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVj
dG9yPFNsb3dDYXNlRW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBzdGF0aWNfYXNzZXJ0KGFyZ3VtZW50R1BS
MyAhPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7Ci0gICAgbW92ZShCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOwotICAgIG1vdmUoQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIHZpYWJsZUFyZ3VtZW50R1BSNCk7Ci0g
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOwotICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT4oYnl0ZWNv
ZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0KTsKKyAgICB1c2luZyBTbG93T3Bl
cmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3Bl
cmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJy
ZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDI+KCk7Cisg
ICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFyZzNKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxT
bG93T3BlcmF0aW9uLCAzPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBhcmc0SlNSID0g
cHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgND4oKTsKKworICAgIHN0YXRpY19h
c3NlcnQoIUJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2VKU1Iub3ZlcmxhcHMoYXJnNEpT
UikpOworICAgIG1vdmVWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHlKU1IsIGFyZzRKU1IpOworICAgIG1vdmVWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZUpTUiwgYXJnM0pTUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHBy
b2ZpbGVHUFIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxTbG93T3BlcmF0aW9uPigK
KyAgICAgICAgYnl0ZWNvZGUsCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGRzdCwKKyAgICAg
ICAgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgcHJvZmlsZUdQUiwgYXJnM0pTUiwgYXJn
NEpTUik7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDIsOCArMTQzLDgg
QEAgdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBi
eXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50
R1BSMSk7Ci0gICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
ID09IHJlZ1QwKTsKLSAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5ID09IHJlZ1QxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpID09IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBheWxvYWRHUFIoKSA9
PSByZWdUMSk7CiAKICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBwcm9maWxlR1BSKTsKQEAgLTE4MSw4ICsxODIsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJh
dAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1Owog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29u
c3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2Fk
R1BSKCk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKQEAgLTIwOSwxOSArMjEwLDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2VKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHlKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0SlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvR1BS
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUpTUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VK
U1IsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
LAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0
dWJJbmZvR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUik7CiAKICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2
YXRlTmFtZTsKQEAgLTIzNCw4ICsyMzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXN1bHRKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRK
U1IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQpAQCAtMjUwLDExICsyNTEsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmUKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSwgYXJndW1lbnRHUFIzKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMp
OworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+
KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVu
dEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9w
ZXJ0eUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcHJvcGVydHlKU1IpOworICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxTbG93T3BlcmF0aW9uPigKKyAgICAgICAgYnl0ZWNv
ZGUsCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGRzdCwKKyAgICAgICAgZ2xvYmFsT2JqZWN0
R1BSLCBzdHViSW5mb0dQUiwgYmFzZUpTUiwgcHJvcGVydHlKU1IpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMjY0LDggKzI3NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNS
LnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHlKU1IucGF5bG9hZEdQUigpOwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0zMjQsMTcgKzMz
NSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJh
bmQ7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
dXNpbmcgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2VKU1I7CisgICAgdXNpbmcg
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kSlNSOworICAgIHVzaW5nIEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
cmFuZCwgYnJhbmRHUFIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VKU1IpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kSlNSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRB
Y2Nlc3NHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisgICAgICAgIGJhc2VKU1IsIGJyYW5kSlNS
LCBzdHViSW5mb0dQUik7CiAKICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CkBAIC0zNjUsMTEgKzM3NiwyMCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5k
PigpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQ
UjMpOwotICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5k
T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIzKTsKKworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlw
ZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAw
PigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJyZWRBcmd1bWVu
dEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNl
SlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25z
dGV4cHIgSlNWYWx1ZVJlZ3MgYnJhbmRKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3Bl
cmF0aW9uLCAzPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBi
YXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGJy
YW5kSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAgICAgICBBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNlSlNSLCBicmFu
ZEpTUik7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNzksMTAgKzM5OSwx
MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJh
c2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgY29u
c3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpi
cmFuZEpTUi5wYXlsb2FkR1BSKCk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09
IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChicmFuZEdQUiA9PSBhcmd1bWVudEdQ
UjEpOwogCiAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rp
b25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJn
dW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwpAQCAtMzk5LDE4ICs0MTksMTgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7
CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgdXNp
bmcgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2VKU1I7CisgICAgdXNpbmcgQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kSlNSOworICAgIHVzaW5nIEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFu
ZCwgYnJhbmRHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpTUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRKU1IpOwogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworICAgICAgICBiYXNlSlNSLCBicmFuZEpT
Uiwgc3R1YkluZm9HUFIpOwogCiAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CkBAIC00MzUsMTEgKzQ1NSwxOSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOwotICAgIGNhbGxPcGVyYXRpb248ZGVj
bHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAg
IHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFu
ZE9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZl
cnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7
CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpT
UjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBicmFuZEpT
UiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYnJhbmRKU1IpOworICAgIGNhbGxPcGVyYXRp
b248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGdsb2JhbE9iamVj
dEdQUiwgc3R1YkluZm9HUFIsIGJhc2VKU1IsIGJyYW5kSlNSKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTQ0OSwxMCArNDc3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kSlNSLnBheWxvYWRHUFIoKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwot
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KGJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKICAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJh
aXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRU
eXBlcz46OnZhbHVlKTsKQEAgLTQ2MywxMSArNDkxLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlW
YWxEaXJlY3Q+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewpAQCAtNDc2LDIzICs0OTksMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjp2YWx1ZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICB1c2luZyBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnZhbHVlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvR1BSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2Zp
bGVHUFI7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVKU1IpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwg
cHJvZmlsZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJh
c2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUpT
Ui5wYXlsb2FkR1BSKCksIHByb2ZpbGVHUFIpOwogICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBw
cm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYmFzZUpTUiwgcHJvcGVydHlK
U1IsIHZhbHVlSlNSLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7CiAKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc0ludDMyID0gdHJ1ZTsKQEAgLTUxNyw2ICs1NDAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKwordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0X29wX3B1dF9ieV92YWw8T3BQdXRC
eVZhbERpcmVjdD4oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBib29sIGlzRGlyZWN0
ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0
OwpAQCAtNTQ0LDE3ICs1NzQsMjYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBj
bG9iYmVyZWQuCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCB2aWFibGVBcmd1bWVudEdQUjQpOworICAgIHVzaW5n
IFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXpl
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJh
c2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNv
bnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNs
b3dPcGVyYXRpb24sIDI+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSID0g
cHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwg
ND4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBwcmVmZXJyZWRBcmd1bWVu
dEdQUjxTbG93T3BlcmF0aW9uLCA1PigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxP
YmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZh
bERpcmVjdD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9m
aWxlKCksIHZpYWJsZUFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9w
UHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxl
R1BSKTsKICAgICBlbHNlCi0gICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCB2aWFibGVBcmd1bWVudEdQUjUpOwotICAgIGNhbGxP
cGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+KEFkZHJl
c3ModmlhYmxlQXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMsIHZpYWJsZUFyZ3VtZW50R1BSNCwgdmlhYmxlQXJndW1lbnRHUFI1KTsKKyAgICAg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxl
KCksIHByb2ZpbGVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpT
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlKU1IpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlSlNSKTsKKyAgICBjYWxsT3Bl
cmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICBnbG9iYWxP
YmplY3RHUFIsIGJhc2VKU1IsIHByb3BlcnR5SlNSLCB2YWx1ZUpTUiwgc3R1YkluZm9HUFIsIHBy
b2ZpbGVHUFIpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNTk1LDE0ICs2
MzQsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3df
b3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXQKICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCk7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlSlNSLnBheWxvYWRHUFIo
KTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmls
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9maWxlR1BSOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNTsKICAgICB7Ci0gICAgICAgIFJlZ2lzdGVyU2V0IHVzZWQoQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHks
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9maWxlKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChiYXNlR1BSLCBwcm9wZXJ0
eUdQUiwgdmFsdWVHUFIsIHByb2ZpbGVHUFIpOwogICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFp
bnMocmVnVDQpKTsKICAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CiAgICAg
fQpAQCAtNjMyLDIwICs2NzEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2
YWx1ZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgdXNpbmcgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6YmFzZUpTUjsKKyAgICB1c2luZyBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eUpTUjsKKyAgICB1c2luZyBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZUpTUjsKKyAg
ICB1c2luZyBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VKU1IpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5SlNS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUpTUik7CiAKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5l
cmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9H
UFIpOworICAgICAgICBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgdmFsdWVKU1IsIEludmFsaWRHUFJS
ZWcsIHN0dWJJbmZvR1BSKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOwpAQCAtNjc4LDEyICs3MTcsMjEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmUKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4o
KTsKIAotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMik7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjMpOwot
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgdmlh
YmxlQXJndW1lbnRHUFI0KTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1
dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpPihBZGRyZXNzKHZpYWJsZUFyZ3VtZW50
R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVB
cmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIHVzaW5nIFNsb3dPcGVy
YXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGlt
aXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFy
Z3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdz
IGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNS
PFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNS
ID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlv
biwgND4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUpT
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBwcm9w
ZXJ0eUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2
YWx1ZUpTUik7CisgICAgY2FsbE9wZXJhdGlvbjxTbG93T3BlcmF0aW9uPigKKyAgICAgICAgQWRk
cmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgdmFs
dWVKU1IsIHN0dWJJbmZvR1BSLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTcxNiw5ICs3NjQsOSBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBh
cmVDYWxsRwogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHlKU1Iu
cGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZUpTUi5wYXlsb2FkR1BSKCk7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNzQyLDYgKzc5MCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFy
ZUNhbGxHCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwpAQCAtNzk1LDYgKzg0NSw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCisj
ZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpOwpAQCAtODAyLDE3ICs4NTQsMTcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BS
ID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoOworICAgIHVzaW5nIEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZUpTUjsKKyAg
ICB1c2luZyBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUjsKKyAgICB1c2luZyBC
YXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOworICAgIHVzaW5nIEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaEdQUjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpTUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UpOwogICAgIEpJVERl
bEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGJhc2VKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOwogCiAg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRl
QnlJRDsKQEAgLTgyNSw4ICs4NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGJveEJvb2xlYW4ocmVzdWx0SlNSLnBheWxv
YWRHUFIoKSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0SlNSKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0
ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9i
YmVycyByZWdpc3RlcnMuCkBAIC04NDksMTAgKzkwMSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1l
bnRHUFIyKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OwotICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXpl
KT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNs
dHlwZShvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4o
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRH
UFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpT
UiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVy
YXRpb24+KAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJ
bmZvR1BSLCBiYXNlSlNSLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg3Niw4ICs5MzYsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2wKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJl
Z1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgdXNpbmcgQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHRKU1IucGF5bG9hZEdQ
UigpID09IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgIGJveEJvb2xlYW4ocmVzdWx0
SlNSLnBheWxvYWRHUFIoKSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0SlNSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKQEAgLTkyNSwxOSArOTg4LDIwIEBAIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7Ci0gICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHVzaW5nIEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OmJhc2VKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHlKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0SlNSOworICAgIHVzaW5nIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvR1BS
OworICAgIHVzaW5nIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2hHUFI7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpTUiwg
YmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlKU1Ip
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUpTUiwgcHJvcGVydHkp
OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAgICAgICBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgcmVz
dWx0SlNSLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CiAKICAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKQEAgLTk1MCw4ICsx
MDE0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMu
YXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOworICAgIGJveEJvb2xlYW4ocmVzdWx0SlNSLnBheWxvYWRHUFIoKSwgcmVzdWx0
SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0SlNSKTsKIAogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CkBAIC05NzQsMTEgKzEwMzgsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKLSAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgIGNhbGxPcGVyYXRp
b248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICB1c2luZyBTbG93T3Bl
cmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7CisgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93
T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVm
ZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBiYXNlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4o
KTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1IgPSBwcmVmZXJyZWRBcmd1
bWVudEpTUjxTbG93T3BlcmF0aW9uLCAzPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9i
YWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlKU1IpOworICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJl
c3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIGJhc2VKU1IsIHByb3Bl
cnR5SlNSLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAyLDggKzEwNzQsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFMKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJl
Z1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgdXNpbmcgQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHRKU1IucGF5bG9hZEdQ
UigpID09IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgIGJveEJvb2xlYW4ocmVzdWx0
SlNSLnBheWxvYWRHUFIoKSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0SlNSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKQEAgLTEwNTEsMTYgKzExMjYsMTYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0KTsKKyAgICB1c2luZyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1I7Cisg
ICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcg
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgYmFzZUpTUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VK
U1IsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBi
YXNlSlNSLCByZXN1bHRKU1IsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsK
IAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRy
eUdldEJ5SWQ7CkBAIC0xMDczLDggKzExNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJl
c3VsdEpTUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMDkwLDEwICsxMTY1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwot
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
cHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwg
MT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4o
CisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIHJlc3VsdFZSZWcsCisgICAgICAgIGdsb2JhbE9i
amVjdEdQUiwgc3R1YkluZm9HUFIsIGJhc2VKU1IsCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CkBAIC0xMTAzLDcgKzExODcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogICAgIG1vdmUo
SklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2VKU1IucGF5bG9hZEdQUigpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKIApAQCAtMTEyNiwxNiArMTIxMCwxNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQpOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZUpT
UjsKKyAgICB1c2luZyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUjsKKyAgICB1
c2luZyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCBiYXNlSlNSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUpTUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksIGJhc2VKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpOwogCiAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKQEAgLTExNDgsOCArMTIzMiw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCByZXN1bHRKU1IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTE2NSwxMCArMTI0OSwyMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICB1c2lu
ZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXpl
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29u
c3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3Bl
cmF0aW9uLCAyPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBi
YXNlSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8U2xvd09wZXJhdGlvbj4oCisg
ICAgICAgIGJ5dGVjb2RlLAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICByZXN1bHRWUmVnLAor
ICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNlSlNSLAorICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3OCw3ICsxMjcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmUKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCkBAIC0xMjAyLDI0ICsxMjk2LDI3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzY3JhdGNoOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0SlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm9H
UFI7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoR1BSOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlSlNSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUpTUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92
bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAg
ICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gz
MihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2Rl
OjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVN
ZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKAorICAgICAgICAgICAgYnl0ZWNvZGUsCisgICAgICAgICAgICBPcEdl
dEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRh
ZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLAorICAgICAgICAgICAgYmFz
ZUpTUi5wYXlsb2FkR1BSKCksIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1v
ZGUubGluayh0aGlzKTsKICAgICB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgYmFzZUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
CiAKICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXRCeUlkOwpAQCAtMTIzMyw4ICsxMzMwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRK
U1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmVzdWx0SlNSKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQpAQCAtMTI1MCwxMCArMTM0NywyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7
Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9
IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24s
IDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1
bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9i
YWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBiYXNlSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8U2xv
d09wZXJhdGlvbj4oCisgICAgICAgIGJ5dGVjb2RlLAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAg
ICByZXN1bHRWUmVnLAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNl
SlNSLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTI2Myw3ICsxMzcwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogCkBAIC0xMjg3LDE5
ICsxMzk0LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhp
c1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1
YkluZm87Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHVzaW5nIEJhc2VsaW5lR2V0
QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzSlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJl
ZywgdGhpc0dQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZS
ZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VKU1IpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNKU1IpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHRoaXNKU1IsIHRoaXNWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRKU1IsIGJhc2VKU1IsIHRoaXNKU1IsIHN0
dWJJbmZvR1BSKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKQEAgLTEzMTMsMTAgKzE0MjAsMTIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkc1dpdGhUaGlz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRKU1IpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmVzdWx0SlNSKTsKIH0KIAorI2lmIFVTRShKU1ZB
TFVFNjQpCisKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcihWTSYgdm0pCiB7CkBAIC0xMzU0LDYgKzE0NjMsOCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0bwogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisjZW5kaWYK
Kwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMTM2NywxMSArMTQ3
OCwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsKLSAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwg
MD4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1l
bnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFz
ZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAgY29u
c3RleHByIEpTVmFsdWVSZWdzIHRoaXNKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3Bl
cmF0aW9uLCAzPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBi
YXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
LCB0aGlzSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8U2xvd09wZXJhdGlvbj4o
CisgICAgICAgIGJ5dGVjb2RlLAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICByZXN1bHRWUmVn
LAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNlSlNSLCB0aGlzSlNS
LAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM4MSw4ICsxNTAzLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgY29u
c3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OnRoaXNKU1IucGF5bG9hZEdQUigpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRH
UFIxKTsKQEAgLTEzOTksNiArMTUyMSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCisjaWYg
VVNFKEpTVkFMVUU2NCkKKwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CkBAIC0xNDM4LDYgKzE1NjIsOCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYQogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwpAQCAtMTQ1MCwxOCArMTU3NiwxOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVu
IGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNv
ZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0
IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgdXNpbmcgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpi
YXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWVKU1I7Cisg
ICAgdXNpbmcgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKyAgICB1c2lu
ZyBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2hHUFI7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlVlJlZywgdmFsdWVKU1IpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
IGdlbigKICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUp
LAorICAgICAgICBiYXNlSlNSLCB2YWx1ZUpTUiwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVj
bWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0
S2luZDo6Tm90RGlyZWN0KTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKQEAgLTE0OTYsMTEgKzE2MjMsMjAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQ
UjMpOwotICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9w
dGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+
KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1l
bnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFz
ZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUpTUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGNhbGxPcGVy
YXRpb248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGdsb2JhbE9i
amVjdEdQUiwgc3R1YkluZm9HUFIsIHZhbHVlSlNSLCBiYXNlSlNSLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtMTUxMCw4ICsxNjQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8v
IGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlSlNSLnBheWxvYWRH
UFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BSID09IGFy
Z3VtZW50R1BSMSk7CkBAIC0xNTcxLDE2ICsxNzA3LDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHVzaW5nIEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvR1BSOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFz
ZUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVn
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlSlNSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZVZSZWcpOwogCiAgICAgSklU
SW5CeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KSwgYmFzZUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUik7CiAKICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7
CkBAIC0xNTkzLDcgKzE3MjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcsIHJlc3VsdEpTUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTYwOSwxMCArMTc0NSwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsbwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0
aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSID0gcHJlZmVycmVk
QXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUpTUik7CisgICAgY2FsbE9wZXJhdGlvbjxTbG93T3BlcmF0
aW9uPigKKyAgICAgICAgQWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwKKyAgICAgICAgcmVzdWx0VlJlZywKKyAgICAgICAgZ2xv
YmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgYmFzZUpTUiwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTE2MjIsNyArMTc2Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpi
YXNlSlNSLnBheWxvYWRHUFIoKTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAg
fHwgIWlzQVJNNjQoKSk7CiAKQEAgLTE2NDcsMTkgKzE3OTIsMjAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cmVzdWx0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHVzaW5nIEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6YmFzZUpTUjsKKyAgICB1c2luZyBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5SlNSOworICAgIHVzaW5nIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0SlNS
OworICAgIHVzaW5nIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisgICAg
dXNpbmcgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoR1BSOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
eXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VKU1IpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5SlNSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBiYXNlSlNSLnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUik7CiAKICAg
ICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsK
KyAgICAgICAgYmFzZUpTUiwgcHJvcGVydHlKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIpOwog
CiAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5C
eVZhbDsKQEAgLTE2NzIsNyArMTgxOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0SlNSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTY4NywxMiArMTgzMywyMiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1
bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBh
cmd1bWVudEdQUjMpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgdmlhYmxlQXJndW1lbnRHUFI0KTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9w
ZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0
KTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9w
dGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJl
ZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xv
d09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisgICAgY29uc3RleHByIEpT
VmFsdWVSZWdzIHByb3BlcnR5SlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlv
biwgND4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5C
eVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlSlNSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5SlNSKTsK
KyAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAgICAgICBBZGRyZXNzKHN0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAg
ICAgICBkc3QsCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIHByb2ZpbGVH
UFIsIGJhc2VKU1IsIHByb3BlcnR5SlNSKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTE3MDMsOCArMTg1OSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCk7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE3
MjUsMTggKzE4ODEsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIAogdm9pZCBKSVQ6OmVt
aXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgdXNpbmcgQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHlKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHVi
SW5mb0dQUjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcHJvcGVydHlKU1IpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3Ig
Z2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc3R1YkluZm9HUFIpOworICAgICAgICBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgcmVzdWx0
SlNSLCBzdHViSW5mb0dQUik7CiAKICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSB0eXBlOwpAQCAtMTc0OSw3ICsxOTA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXMK
ICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEpTUik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJh
c2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQpAQCAtMTc2Miwx
MSArMTkxOCwyMCBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUgogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlw
ZShvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICB1
c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRp
bWl6ZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRB
cmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xv
d09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1Ig
PSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAzPigpOworCisgICAgbG9hZEds
b2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcHJvcGVydHlKU1IpOworICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4o
CisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGRzdCwKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BS
LCBzdHViSW5mb0dQUiwgYmFzZUpTUiwgcHJvcGVydHlKU1IpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMTc3Niw4ICsxOTQxLDggQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2
YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVh
bFIKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHBy
b3BlcnR5T3JCcmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0xODIxLDYgKzE5ODYsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewogICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwpA
QCAtMjg5Myw4ICszMDYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCi10ZW1wbGF0ZSB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9uKik7
Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CkBAIC0zMDA0LDEw
ICszMTY5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgSnVtcExpc3QgZG9uZUNh
c2VzOwogCi0gICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVudW1lcmF0
b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpy
ZXN1bHRKU1IucGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvR1BSOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVu
dW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNo
MjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggOTFmYWE0ZTUyZmZiMTJhM2Y2
YjUyZTdiOTNhNTUwZGFjZTJmNGNkOC4uYzYwYjYzMmU5NGQxZGVmMmY0MjMwZjBhODRiZTgzNmNm
ZDczNTJhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCkBAIC0xMTgsNzcyICsxMTgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIEpT
VmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLQotICAgIGVt
aXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7
Ci0gICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwKLSAg
ICAgICAgYmFzZVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgcmVzdWx0UmVncyk7Ci0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0UmVncyk7Ci0KLSAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCi0gICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3Jp
dGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xv
YmJlcnMgcmVnaXN0ZXJzLgotICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgotICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0
V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLQotICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotCi0gICAgZW1pdExvYWQyKGJhc2UsIGJh
c2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCksIHByb3BlcnR5LCBwcm9wZXJ0
eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHksIHByb3BlcnR5UmVncy50YWdHUFIoKSk7
Ci0KLSAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRS
ZWdzLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0KLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2RlbEJ5
VmFscy5hcHBlbmQoZ2VuKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKLQotICAgIC8vIFdl
IHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3
cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KLSAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCi0gICAg
Ly8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVj
dGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hv
dWxkRmlsdGVyQmFzZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0KLSAgICBKSVREZWxCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwotCi0gICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKLQotICAgIGVtaXRMb2FkMihiYXNlLCBiYXNlUmVncy50YWdHUFIo
KSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpLCBwcm9wZXJ0eSwgcHJvcGVydHlSZWdzLnRhZ0dQUigp
LCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKSwgVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBy
ZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBKU1ZhbHVl
UmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBKSVREZWxC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwotCi0gICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBlbWl0TG9hZChiYXNlLCBiYXNl
UmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKTsKLQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRy
KG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLQotICAgIGVt
aXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwotCi0g
ICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50
aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVy
cygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0g
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgcmVnVDAsIHJl
Z1Q0KTsKLSAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIHJlZ1QwLCByZWdUNCk7Ci0K
LSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9w
cm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJv
cGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBtX2dl
dEJ5VmFscy5hcHBlbmQoZ2VuKTsKLQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwot
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0g
ICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
LQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRC
eVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0KLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci0gICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKLSAgICBhdXRvIGJhc2VHUFIgPSBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApOwot
ICAgIGF1dG8gcHJvcGVydHlHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotCi0gICAg
ZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0K
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAg
ICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdH
UFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotfQotCi0KLXZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgQVNTRVJU
KGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAg
SklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07
Ci0gICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7Ci0KLSAgICBhdXRvIGJhc2VHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IGF1dG8gcHJvcGVydHlHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi0K
LXZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKLQotICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywg
cmVnVDIpOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOwotCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLQotICAgIEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJ
bnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKLSAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc1N5bWJvbCA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9wdXRCeVZhbHMuYXBwZW5k
KGdlbik7Ci0KLSAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRl
LWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCi0gICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlv
bmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNp
emUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5
NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2
YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5t
X3B1dEtpbmQ7Ci0KLSAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNb
bV9wdXRCeVZhbEluZGV4KytdOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgSlNWYWx1ZVJlZ3MgYmFzZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MocmVnVDMsIHJl
Z1QyKTsKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KTsKLQotICAgIGF1
dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZp
bmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxk
T3B0aW1pemU7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlUmVncywg
cHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MsIGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51
bGxwdHIpKTsKLQotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0g
Ynl0ZWNvZGUubV9icmFuZDsKLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIGJyYW5kUmVncyhyZWdUMywgcmVnVDIpOwotICAgIGVtaXRMb2Fk
KGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwotICAgIGVt
aXRMb2FkKGJyYW5kLCBicmFuZFJlZ3MudGFnR1BSKCksIGJyYW5kUmVncy5wYXlsb2FkR1BSKCkp
OwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQ
UigpKTsKLQotICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7Ci0KLSAgICAv
LyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2lu
Y2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCi0gICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgot
ICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBl
ZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2Us
IFNob3VsZEZpbHRlckJhc2UpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZh
dGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzKHJlZ1QxLCByZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgYnJhbmRSZWdzKHJlZ1QzLCByZWdUMik7Ci0KLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4g
PSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXhdOwotICAg
ICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZh
dGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOwotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENoZWNrUHJpdmF0ZUJyYW5kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJh
bmQ7Ci0gICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVl
UmVncyBicmFuZFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVn
cy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICBlbWl0TG9hZChicmFuZCwg
YnJhbmRSZWdzLnRhZ0dQUigpLCBicmFuZFJlZ3MucGF5bG9hZEdQUigpKTsKLQotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7Ci0KLSAgICBK
SVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0
ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIGJyYW5kUmVncyhyZWdUMywgcmVnVDIp
OwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFu
ZEFjY2Vzc0luZGV4XTsKLSAgICArK21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXg7Ci0gICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdz
LCBicmFuZFJlZ3MpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9wdXRfYnlfdmFs
PE9wUHV0QnlWYWxEaXJlY3Q+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLQotICAg
IGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwot
ICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOwotCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYnl0ZWNvZGUsIHJlZ1QwLCByZWdUNik7Ci0gICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCks
IHJlZ1Q2KTsKLQotICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1Zh
bHVlUmVncyhyZWdUNSwgcmVnVDQpLCByZWdUNiwgSW52YWxpZEdQUlJlZyk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7Ci0KLSAgICAvLyBJQyBjYW4gd3JpdGUg
bmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCi0g
ICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVm
ZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwg
U2hvdWxkRmlsdGVyQmFzZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlOwotICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmlj
dCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7Ci0KLSAgICBhdXRvIGxv
YWQgPSBbJl0oYXV0byBieXRlY29kZSkgewotICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgICAgIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5
dGVjb2RlKTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKLSAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKLSAgICB9OwotCi0gICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7Ci0gICAgZWxzZQotICAgICAgICBs
b2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7Ci0KLSAgICBKSVRQdXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwotCi0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotCi0gICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4g
dG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KLSAgICAvLyBTd2FwcGluZyBzaG91
bGRuJ3QgaGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4KLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVn
VDIsIHJlZ1QxLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwg
cmVnVDUsIHJlZ1Q0KTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3Qg
PyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0
dWJJbmZvKCksIHByb2ZpbGUpOwotCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1p
dExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgcmVnVDEpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRS
ZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlc3Vs
dFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
cHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0g
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKLSAgICAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwotfQotCi0KLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVt
aXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0
UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlc3Vs
dFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
cHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7Ci0gICAgCi0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotCi0gICAgaWYgKCppZGVudCA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0g
ICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpv
ZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2Rl
KCksIHJlZ1QyKTsKLSAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihO
b3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpB
cnJheUxlbmd0aCkpLCByZWdUMik7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEo
KSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgcmVnVDAsIHJlZ1QyKTsKLSAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7
Ci0gICAgfQotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7Ci0gICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmls
ZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxp
ZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVn
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRl
Y29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9m
aWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0gICAgCi0g
ICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZCh0aGlzVlJlZywg
cmVnVDQsIHJlZ1QzKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzVlJlZywgcmVnVDQpOwot
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2Zp
bGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICpp
ZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1Q0LCByZWdUMyksIEludmFsaWRHUFJSZWcpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJl
Z3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNX
aXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJl
c3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1Yklu
Zm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1Qz
KSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVj
dHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAv
LyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lz
dGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKLSAgICAvLyBzdWNoIHRo
YXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNl
IGZyb20gdGhpcy4KLSAgICAKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAg
ICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7Ci0gICAgCi0gICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdU
MCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRD
b2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEludmFsaWRHUFJSZWcsCi0gICAgICAgIHJl
Z1QxLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCksIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVj
dCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9wdXRC
eUlkcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCi0gICAgLy8gRklYTUU6
IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRv
IHJlZHVjZSBjb2RlIHNpemUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVy
QmFzZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0KLSAgICAvLyBKSVRQdXRC
eUlkR2VuZXJhdG9yIG9ubHkgcHJlc2VydmUgdGhlIHZhbHVlIGFuZCB0aGUgYmFzZSdzIHBheWxv
YWQsIHdlIGhhdmUgdG8gcmVsb2FkIHRoZSB0YWcuCi0gICAgZW1pdExvYWRUYWcoYmFzZSwgcmVn
VDEpOwotCi0gICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5
SWRJbmRleCsrXTsKLSAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAg
ICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7Ci0gICAgCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotCi0g
ICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZh
bGlkR1BSUmVnKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7Ci0K
LSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBKSVRJbkJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwotCi0gICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0KLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEs
IHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgcmVnVDAsIHJlZ1Q0KTsKLQotICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJl
Zyk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKLQotICAgIGVt
aXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
VmFsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwot
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQot
ICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgr
K107Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7Ci0KLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwotfQotCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFj
Y2Vzc1R5cGUgdHlwZSkKLXsKLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9w
ZXJ0eU9yQnJhbmQsIHJlZ1QzLCByZWdUMik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKLQotICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
bV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdU
MCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNz
VHlwZSB0eXBlKQotewotICAgIC8vIEZJWE1FOiA2NC1iaXQgc2VlbXMgdG8gYWxzbyBpZ25vcmUg
YmFzZS9wcm9wZXJ0eS4KLSAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGJhc2UpOwotICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7Ci0KLSAgICBKSVRJbkJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwotICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJp
dmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7Ci0KLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0
ZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9o
YXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSGFzUHJpdmF0ZU5hbWU+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1f
ZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fcHJvcGVydHksIEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBl
bWl0SGFzUHJpdmF0ZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5t
X2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93
KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1
cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKQEAgLTEzNzMsOCArNjA3
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCi10ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9uKik7Ci0KIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442355</attachid>
            <date>2021-10-25 03:32:44 -0700</date>
            <delta_ts>2021-10-25 06:55:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232079-20211025113242.patch</filename>
            <type>text/plain</type>
            <size>229708</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0Nzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZjcwNmI5MWM3YzYzMjQ2NjJlZDZhNzAxYWJkNDQ2MTdmZmRjYjdkLi4zZWRjMDlhZGE0YTg1MDY5
Mzc1NWQ1NzBjNDU4MGE1NGU3Zjg1NmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjYgQEAKKzIwMjEtMTAtMjUgIEdlemEgTG9yZSAgPGdlemFsb3JlQGdtYWlsLmNvbT4K
KworICAgICAgICBbSlNDXVszMmJpdF0gVXNlIERhdGFJQyBpbiBCYXNlbGluZSBKSVQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjA3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgVGhpcyBwYXRjaCBwb3J0
cyB0aGUgSlNWQUxVRTMyXzY0IGJhc2VsaW5lIEpJVCB0byB1c2UgRGF0YUlDcy4KKworICAgICAg
ICBUaGUgbWFqb3JpdHkgb2YgdGhlIGludm9sdmVkIG9wY29kZXMgKGFsbCBidXQgb25lKSBjb3Vs
ZCBiZSBlYXNpbHkKKyAgICAgICAgbW9kaWZpZWQgdG8gdXNlIGEgY29tbW9uIGltcGxlbWVudGF0
aW9uIGJldHdlZW4gSlNWQUxVRTY0IGFuZAorICAgICAgICBKU1ZBTFVFMzJfNjQgcGxhdGZvcm1z
IGJ5IGFic3RyYWN0aW5nIG92ZXIgbWFjaGluZSByZWdpc3RlcnMgaG9sZGluZyBhCisgICAgICAg
IEpTVmFsdWUgdXNpbmcgSlNWYWx1ZVJlZyB0eXBlcyBpbnN0ZWFkIG9mIEdQUlJlZy4KKworICAg
ICAgICBUaGUgb25seSBub24tdHJpdmlhbCBhZGRpdGlvbmFsIGFic3RyYWN0aW9uIG5lZWRlZCB3
YXMgb3ZlciB0aGUgaWRlYWwKKyAgICAgICAgYXJndW1lbnQgcmVnaXN0ZXJzIHVzZWQgaW4gYSBm
dW5jdGlvbiBjYWxsLCBzbyBsb2FkaW5nIHRoZSBhcmd1bWVudHMKKyAgICAgICAgZnJvbSBtZW1v
cnkgY2FuIHB1dCB0aGVtIHN0cmFpZ2h0IGluIHRoZSBBQkkgc3BlY2lmaWMgYXJndW1lbnQKKyAg
ICAgICAgcmVnaXN0ZXIgd2hlbmV2ZXIgcG9zc2libGUsIG9yIGFwcHJvcHJpYXRlIHRlbXBvcmFy
aWVzIG90aGVyd2lzZS4gRm9yCisgICAgICAgIHRoaXMgSSBhZGRlZCBDQ2FsbEhlbHBlcnM6OnBy
ZWZlcnJlZEFyZ3VtZW50R1BSIChmb3IgcGFzc2luZyBob3N0CisgICAgICAgIHBvaW50ZXJzIGFu
ZCBvdGhlciBwcmltaXRpdmUgdHlwZXMgdGhhdCBmaXQgaW4gYSBtYWNoaW5lIHJlZ2lzdGVyIG9u
CisgICAgICAgIHRoZSBob3N0IHBsYXRmb3JtKSwgYW5kIENDYWxsSGVscGVyczo6cHJlZmVycmVk
QXJndW1lbnRKU1IgKGZvcgorICAgICAgICBwYXNzaW5nIEpTVmFsdWUvRW5jb2RlZEpTVmFsdWUp
LiBQbGVhc2Ugc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGVzZQorICAgICAgICBpbiB0aGUgY29k
ZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1i
bGVyLmg6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpzdHJiKToKKyAgICAgICAgKiBi
eXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVt
aXRGYXN0UGF0aEltcGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNG
YXN0UGF0aCk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZOb3RPYmplY3QpOgorICAgICAgICAqIGpp
dC9DQ2FsbEhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjpzaXplT2ZBcmcp
OgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnBpY2tKU1IpOgorICAgICAgICAoSlNDOjpD
Q2FsbEhlbHBlcnM6OnByZWZlcnJlZEFyZ3VtZW50SlNSKToKKyAgICAgICAgKEpTQzo6Q0NhbGxI
ZWxwZXJzOjpwcmVmZXJyZWRBcmd1bWVudEdQUik6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmg6CisgICAgICAgICogaml0L0dQUkluZm8uaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZVJlZ3M6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUmVnczo6b3Bl
cmF0b3IhPSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWVSZWdzOjp0YWdHUFIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpKU1ZhbHVlUmVnczo6cGF5bG9hZEdQUiBjb25zdCk6CisgICAgICAg
IChKU0M6OkpTVmFsdWVSZWdzOjp1c2VzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVJl
Z3M6Om92ZXJsYXBzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVJlZ3M6OkpTVmFsdWVS
ZWdzKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KToKKyAgICAgICAg
KiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKiBqaXQvSklU
Lmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBp
bGVDYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9v
cGVuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJf
NjQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9KSVRDb2RlLmg6CisgICAgICAgIChKU0M6
OkpJVENvZGU6OnVzZURhdGFJQyk6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKToKKyAg
ICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeUlkR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpK
SVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmg6CisgICAgICAgICogaml0L0pJVElu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgICogaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZSk6CisgICAgICAg
IChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX3NldF9wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNr
X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3By
aXZhdGVfYnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xv
d19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3By
aXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9kZWxfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9p
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEhhc1ByaXZhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAg
ICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKwogMjAyMS0xMC0yNCAgQWxleGV5
IFNodmF5a2EgIDxhc2h2YXlrYUBhcHBsZS5jb20+CiAKICAgICAgICAgSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoKSBzaG91bGQgdXNlIHByb3RvdHlwZSdzIGdsb2Jh
bCBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2RmM2E2MTg2ZjYzZjgz
NDQyZGYxN2NlMjkzNDIwNDI4OTNmMmJkZi4uZWM1NmMxMGVhYTBlNGYwNmEyZTMwZTNhYWI2NDZh
MGYwZGJiNjhjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM0NDYsNyArMzQ0
Niw2IEBACiAJCTE0NkFBQjM3MEI2NkE5NDQwMEU1NUYxNiAvKiBKU1N0cmluZ1JlZkNGLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ1JlZkNGLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ2QjE0REIxMkVCNUIxMjAwMUJFQzFCIC8q
IENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbnNlcnZhdGl2ZVJvb3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQ2RkE1QTgxMzc4RjZCMDAwMzYyN0EzIC8qIEhhbmRsZVR5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhhbmRsZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTE0NkZFNTExMTFBNzEwNDMwMDg3QUU2NiAvKiBKSVRDYWxsMzJfNjQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQ2FsbDMyXzY0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3MTQ4MkUyMEQzMjM2NDAwOTBFNjMwIC8qIEpTV3Jh
cHBlck1hcFRlc3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV3JhcHBl
ck1hcFRlc3RzLmg7IHBhdGggPSBBUEkvdGVzdHMvSlNXcmFwcGVyTWFwVGVzdHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3MTQ4MkYyMEQzMjM2NTAwOTBFNjMwIC8qIEpTV3Jh
cHBlck1hcFRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
SlNXcmFwcGVyTWFwVGVzdHMubW07IHBhdGggPSBBUEkvdGVzdHMvSlNXcmFwcGVyTWFwVGVzdHMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NzM0MUNCMURDMDJENzIwMEFBMjlC
QSAvKiBFeGVjdXRhYmxlQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
eGVjdXRhYmxlQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM2NSw3ICs2
MzY0LDYgQEAKIAkJCQlGRTNBMDZBRjFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0WG9yR2VuZXJh
dG9yLmNwcCAqLywKIAkJCQlGRTNBMDZCMDFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0WG9yR2Vu
ZXJhdG9yLmggKi8sCiAJCQkJODZDQzg1QTIwRUU3OUI3NDAwMjg4NjgyIC8qIEpJVENhbGwuY3Bw
ICovLAotCQkJCTE0NkZFNTExMTFBNzEwNDMwMDg3QUU2NiAvKiBKSVRDYWxsMzJfNjQuY3BwICov
LAogCQkJCTBGOEY5NDQzMTY2NzYzNTIwMEQ2MTk3MSAvKiBKSVRDb2RlLmNwcCAqLywKIAkJCQk4
NkNDRUZERDBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5oICovLAogCQkJCTBGRkI4MEJCMjBB
Nzk0NzAwMDA2QUFGNiAvKiBKSVRDb2RlSW5saW5lcy5oICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IGUwZTIzYTJmMzZjMTI1ZTk2N2YwZWZhNWM0ZDliOThkYTg4Y2VjMTMuLmRk
OGNiNjI3MjQxYmU4OGNlZWYwNzQ1OWM4NWVmM2M4YTlmOGM4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQKQEAgLTY0Miw3ICs2NDIsNiBAQCBqaXQvSklUQml0QW5kR2VuZXJhdG9yLmNw
cAogaml0L0pJVEJpdE9yR2VuZXJhdG9yLmNwcAogaml0L0pJVEJpdFhvckdlbmVyYXRvci5jcHAK
IGppdC9KSVRDYWxsLmNwcAotaml0L0pJVENhbGwzMl82NC5jcHAKIGppdC9KSVRDb2RlLmNwcAog
aml0L0pJVENvbXBpbGF0aW9uLmNwcAogaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCmluZGV4IDFj
OGNkMGNlNGZkODIxYThiODkzNDVlNDc5ZGJjZDlmNTMxNDRiNzkuLmIxMjY1Mzg1YTVkNzM5Njdl
ZDVlOTA5NDgyMjA5ZWRkYjRmNDI0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKQEAgLTE1NjUsOCArMTU2NSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKHJuICE9IEFSTVJlZ2lzdGVyczo6cGMpOwogICAgICAgICBBU1NFUlQo
aW1tLmlzVUludDEyKCkpOwogCi0gICAgICAgIGlmICghKChydCB8IHJuKSAmIDgpICYmIGltbS5p
c1VJbnQ3KCkpCi0gICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A1SW1tNVJlZzNSZWcz
KE9QX1NUUkJfaW1tX1QxLCBpbW0uZ2V0VUludDcoKSA+PiAyLCBybiwgcnQpOworICAgICAgICBp
ZiAoISgocnQgfCBybikgJiA4KSAmJiBpbW0uaXNVSW50NSgpKQorICAgICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lV29yZE9wNUltbTVSZWczUmVnMyhPUF9TVFJCX2ltbV9UMSwgaW1tLmdldFVJbnQ1
KCksIHJuLCBydCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dv
cmRPcDEyUmVnNFJlZzRJbW0xMihPUF9TVFJCX2ltbV9UMiwgcm4sIHJ0LCBpbW0uZ2V0VUludDEy
KCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAKaW5kZXggNjYzYmY5OTlmZDQ3ZjhmMzEzZTA0NjNkNmJkYzZlY2VmNGY4MDk1NC4u
MDYzY2E4MmRkNWI5ZWQ2OWIyYjkwYjQ0MzQzYzU3OGMyNDE3YjcwMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKQEAgLTMwNCw4ICszMDQs
MTEgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRo
SW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW4KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOwogCiAgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VEYXRhSUM6OlllcykgeworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzY3JhdGNoIHJlZ2lzdGVyIGlzIG5vdCBnZW5lcmFsbHkgc2Fm
ZSB0byB1c2Ugb24gQVJNdjcsIGFzIHRoZSBtYWNybworICAgICAgICAvLyAgICAgICAgYXNzZW1i
bGVyIGFsd2F5cyBhc3N1bWVzIGl0IGlzIGF2YWlsYWJsZS4gQXQgdGhlIG1vbWVudCwgaXQgZG9l
cyBoYXBwZW4gdG8gd29yaworICAgICAgICAvLyAgICAgICAgd2l0aCB0aGUgY29kZSBiZWxvdy4K
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7Ci0gICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNh
bGxvd1NjcmF0Y2goaml0KTsKQEAgLTM2NSw5ICszNjgsNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCwgRwogTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZh
bGlkR1BSUmVnKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIFVzZXMgRGF0YUlDCi0jZW5kaWYKICAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUM6OlllcywgZmFsc2UsIG51bGxwdHIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAppbmRleCA2YWI0Y2ViNGI2YTUw
NGM0ODI2NGQ1MmQxZDE1ODFiZTZhNTkwYTMwLi5mZDM0YmVjY2ZmMmIwZThiNjQ2ZGNjNzBlNGMy
YzM4OGRlNTQ1Y2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKQEAgLTQzNCw3ICs0MzQsNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNldENhY2hlVHlwZShjb25zdCBDb25jdXJyZW50SlNM
b2NrZXJCYXNlJgogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byYgdW5saW5rZWRTdHViSW5mbykKIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGFjY2Vzc1R5
cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CiAgICAgc3RhcnQgPSB1bmxpbmtlZFN0
dWJJbmZvLnN0YXJ0OwogICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxv
Y2F0aW9uOwpAQCAtNDQ1LDggKzQ0NCw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRp
YWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpCiAKICAg
ICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
OwogICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRT
dHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgewotICAgICAgICAvLyBGb3IgaXRl
cmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJl
Z2lzdGVyIGVpdGhlci4KLSAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9y
X25leHQsIHdlIGNhbid0IGNsb2JiZXIgdGhlICJkb250Q2xvYmJlckpTUiIgcmVnaXN0ZXIgZWl0
aGVyLgorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmRvbnRDbG9iYmVySlNSKTsKICAgICB9CiAKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKQEAg
LTQ4MCwxMyArNDc5LDEzIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9t
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpCiAgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CiAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVOYW1lOgogICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFt
ZU9wdGltaXplOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVCcmFuZDogCiAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVC
cmFuZE9wdGltaXplOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFBy
aXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgogICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CkBAIC01NDMsOTYgKzU0
MiwxNTIgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGkKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUp
IHsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgogICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSBmYWxzZTsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxS
ZWdpc3RlcnM6OmJhc2U7Ci0gICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURl
bEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAgICAgICByZWdzLnByb3Bl
cnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHlKU1IucGF5bG9hZEdQ
UigpOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dEpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAg
ICBiYXNlVGFnR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUi50YWdHUFIo
KTsKKyAgICAgICAgdi5wcm9wZXJ0eVRhZ0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5SlNSLnRhZ0dQUigpOworICAgICAgICB2YWx1ZVRhZ0dQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdEpTUi50YWdHUFIoKTsKKyNlbmRpZgogICAgICAgICBicmVh
azsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CiAgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IHRydWU7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6
OmJhc2VKU1IucGF5bG9hZEdQUigpOwogICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxp
ZEdQUlJlZzsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHRKU1IucGF5bG9hZEdQUigpOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
ICAgICBiYXNlVGFnR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQ
UigpOworICAgICAgICB2LnByb3BlcnR5VGFnR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
dmFsdWVUYWdHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUi50YWdHUFIo
KTsKKyNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
OgogICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CiAgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IGZhbHNlOwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKLSAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHJlZ3MucHJv
cGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2Fk
R1BSKCk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0SlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
ICAgIGJhc2VUYWdHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQ
UigpOworICAgICAgICB2LnByb3BlcnR5VGFnR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHlKU1IudGFnR1BSKCk7CisgICAgICAgIHZhbHVlVGFnR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0SlNSLnRhZ0dQUigpOworI2VuZGlmCiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKICAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gZmFsc2U7CiAgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBm
YWxzZTsKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKICAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOwogICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZh
bHVlSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnJlc3VsdEdQUjsKKyAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm9HUFI7
CisgICAgICAgIGJhc2VUYWdHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2YWx1ZVRhZ0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHYucHJvcGVydHlUYWdHUFIgPSBJbnZhbGlkR1BS
UmVnOworI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZh
bDoKICAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKICAgICBjYXNlIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCiAgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IGZhbHNlOwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OwotICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJl
c3VsdDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJh
c2VKU1IucGF5bG9hZEdQUigpOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHRKU1IucGF5bG9hZEdQUigpOwor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
b0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBiYXNlVGFnR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQUigpOworICAgICAgICB2LnByb3BlcnR5
VGFnR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi50YWdHUFIoKTsK
KyAgICAgICAgdmFsdWVUYWdHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdEpT
Ui50YWdHUFIoKTsKKyNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlJZDoKICAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKICAgICAgICAg
cmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxp
bmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAgICAgdi50aGlzVGFnR1BSID0gSW52YWxpZEdQUlJlZzsKKyAg
ICAgICAgYmFzZVRhZ0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlSlNSLnRhZ0dQ
UigpOworICAgICAgICB2YWx1ZVRhZ0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1
bHRKU1IudGFnR1BSKCk7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NU
eXBlOjpUcnlHZXRCeUlkOgogICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKICAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CiAgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IHRydWU7CiAgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAg
ICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUi5wYXls
b2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHYudGhpc1Rh
Z0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VUYWdHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2VKU1IudGFnR1BSKCk7CisgICAgICAgIHZhbHVlVGFnR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHRKU1IudGFnR1BSKCk7CisjZW5kaWYKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CiAgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OwotICAgICAgICByZWdzLnRoaXNH
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwotICAgICAg
ICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHRKU1IucGF5bG9hZEdQUigpOworICAgICAgICByZWdz
LnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc0pTUi5wYXls
b2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAg
YmFzZVRhZ0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlSlNSLnRh
Z0dQUigpOworICAgICAgICB2YWx1ZVRhZ0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVn
aXN0ZXJzOjpyZXN1bHRKU1IudGFnR1BSKCk7CisgICAgICAgIHYudGhpc1RhZ0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzSlNSLnRhZ0dQUigpOworI2VuZGlmCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKICAgICAgICAgaGFz
Q29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKICAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxp
ZEdQUlJlZzsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOwot
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZUpTUi5w
YXlsb2FkR1BSKCk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
Ojp2YWx1ZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgICAgIHYudGhpc1RhZ0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VUYWdHUFIg
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IudGFnR1BSKCk7CisgICAgICAgIHZh
bHVlVGFnR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZUpTUi50YWdHUFIoKTsK
KyNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgog
ICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CiAgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IGZhbHNlOwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKLSAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnZhbHVlOwotICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICAgICAgcmVncy5wcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBheWxvYWRHUFIo
KTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZUpT
Ui5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKICAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNz
VHlwZTo6UHV0QnlWYWwpCi0gICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGVHUFI7CisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgYmFzZVRhZ0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OmJhc2VKU1IudGFnR1BSKCk7CisgICAgICAgIHYucHJvcGVydHlUYWdHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi50YWdHUFIoKTsKKyAgICAgICAgdmFsdWVUYWdH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZUpTUi50YWdHUFIoKTsKKyNlbmRp
ZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoK
ICAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgogICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSBmYWxzZTsKICAgICAgICAgdmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVn
OwotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7
Ci0gICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YnJhbmQ7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmRKU1IucGF5bG9hZEdQUigpOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJ
bmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHZhbHVlVGFnR1BSID0gSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZVRhZ0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpiYXNlSlNSLnRhZ0dQUigpOworICAgICAgICB2LmJyYW5kVGFnR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kSlNSLnRhZ0dQUigpOworI2VuZGlmCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHVubGlua2VkU3R1Yklu
Zm8pOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCiB9CiAKICNpZiBBU1NFUlRf
RU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKaW5kZXggNGJk
NmU2Yzg4NmY1M2RhZGE2NzY3OTYwMWI2MDA3YTlmMTkxY2UwNi4uOWNiODJjN2UxMWE4ZTgwN2Vj
ZDhkNmMxZGRkNjMxMTEwYTM2MWNlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxs
SGVscGVycy5oCkBAIC04NTIsNiArODUyLDE0NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0
Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCiAgICAgc3RhdGljIHZvaWQgZW1pdEpJ
VENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwg
U2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+LCBjb25zdCBjaGFyKik7CisKK3ByaXZh
dGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIEFyZ051
bT4KKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6ZW5hYmxlX2lmX3Q8KEZ1bmN0aW9uVHJhaXRz
PE9wZXJhdGlvblR5cGU+Ojphcml0eSA+IEFyZ051bSksIHNpemVfdD4gc2l6ZU9mQXJnKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzaXplb2YodHlwZW5hbWUgRnVuY3Rpb25UcmFpdHM8T3BlcmF0
aW9uVHlwZT46OnRlbXBsYXRlIEFyZ3VtZW50VHlwZTxBcmdOdW0+KTsKKyAgICB9CisKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB1bnNp
Z25lZCBBcmdOdW0sIHVuc2lnbmVkIEluZGV4ID0gQXJnTnVtLCB0eXBlbmFtZS4uLiBBcmdzPgor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcGlja0pTUihHUFJSZWcgZmlyc3QsIEFy
Z3MuLi4gcmVzdCkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZU9mQXJnPE9wZXJh
dGlvblR5cGUsIEFyZ051bSAtIEluZGV4PigpIDw9IDgsICJEb24ndCBrbm93IGhvdyB0byBoYW5k
bGUgbGFyZ2UgYXJndW1lbnRzIik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoIUluZGV4KQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdzIHsgZmlyc3QgfTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBVTlVTRURfUEFSQU0oZmlyc3QpOyAvLyBPdGhlcndpc2Ugd2FybmluZyBkdWUg
dG8gY29uc3RleHByCisgICAgICAgICAgICByZXR1cm4gcGlja0pTUjxPcGVyYXRpb25UeXBlLCBB
cmdOdW0sIEluZGV4IC0gMT4ocmVzdC4uLik7CisgICAgICAgIH0KKyAgICB9CisjZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB1bnNp
Z25lZCBBcmdOdW0sIHVuc2lnbmVkIEluZGV4ID0gQXJnTnVtLCB0eXBlbmFtZS4uLiBBcmdzPgor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcGlja0pTUihHUFJSZWcgZmlyc3QsIEdQ
UlJlZyBzZWNvbmQsIEdQUlJlZyB0aGlyZCwgQXJncy4uLiByZXN0KQorICAgIHsKKyAgICAgICAg
Y29uc3RleHByIHNpemVfdCBzaXplT2ZDdXJyZW50QXJnID0gc2l6ZU9mQXJnPE9wZXJhdGlvblR5
cGUsIEFyZ051bSAtIEluZGV4PigpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVPZkN1cnJl
bnRBcmcgPD0gOCwgIkRvbid0IGtub3cgaG93IHRvIGhhbmRsZSBsYXJnZSBhcmd1bWVudHMiKTsK
KyAgICAgICAgaWYgY29uc3RleHByICghSW5kZXgpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhw
ciAoc2l6ZU9mQ3VycmVudEFyZyA8PSA0KSB7CisgICAgICAgICAgICAgICAgLy8gRml0cyBpbiBz
aW5nbGUgR1BSCisgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHNlY29uZCk7IC8vIE90aGVy
d2lzZSB3YXJuaW5nIGR1ZSB0byBjb25zdGV4cHIKKyAgICAgICAgICAgICAgICBVTlVTRURfUEFS
QU0odGhpcmQpOyAvLyBPdGhlcndpc2Ugd2FybmluZyBkdWUgdG8gY29uc3RleHByCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShmaXJzdCk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGZpcnN0ID09IEdQUkluZm86OmFyZ3VtZW50R1BSMSAmJiBzZWNvbmQg
PT0gR1BSSW5mbzo6YXJndW1lbnRHUFIyICYmIHRoaXJkID09IEdQUkluZm86OmFyZ3VtZW50R1BS
MykgeworICAgICAgICAgICAgICAgIC8vIFdpZGUgYXJndW1lbnQgcGFzc2VkIGluIEdQUnMgbmVl
ZHMgdG8gc3RhcnQgd2l0aCBldmVuIHJlZ2lzdGVyIG51bWJlciwgc28gc2tpcCBhcmd1bWVudEdQ
UjEKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3MgeyB0aGlyZCwgc2Vjb25kIH07
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZpcnN0IGlzIGVpdGhl
ciBhbiBldmVuIHJlZ2lzdGVyLCBvciB0aGlzIGFyZ3VtZW50IHdpbGwgYmUgcHVzaGVkIHRvIHRo
ZSBzdGFjaywgc28gaXQgZG9lcyBub3QgbWF0dGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWVSZWdzIHsgc2Vjb25kLCBmaXJzdCB9OworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgY29uc3RleHByKHNpemVPZkN1cnJlbnRBcmcgPD0gNCkgewor
ICAgICAgICAgICAgICAgIC8vIEZpdHMgaW4gc2luZ2xlIEdQUgorICAgICAgICAgICAgICAgIFVO
VVNFRF9QQVJBTShmaXJzdCk7IC8vIE90aGVyd2lzZSB3YXJuaW5nIGR1ZSB0byBjb25zdGV4cHIK
KyAgICAgICAgICAgICAgICByZXR1cm4gcGlja0pTUjxPcGVyYXRpb25UeXBlLCBBcmdOdW0sIElu
ZGV4IC0gMT4oc2Vjb25kLCB0aGlyZCwgcmVzdC4uLik7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGZpcnN0ID09IEdQUkluZm86OmFyZ3VtZW50R1BSMSAmJiBzZWNvbmQgPT0gR1BSSW5mbzo6YXJn
dW1lbnRHUFIyICYmIHRoaXJkID09IEdQUkluZm86OmFyZ3VtZW50R1BSMykgeworICAgICAgICAg
ICAgICAgIC8vIFdpZGUgYXJndW1lbnQgcGFzc2VkIGluIEdQUnMgbmVlZHMgdG8gc3RhcnQgd2l0
aCBldmVuIHJlZ2lzdGVyIG51bWJlciwgc28gc2tpcCBhcmd1bWVudEdQUjEsIGJ1dCByZXVzZSBp
dCBsYXRlcgorICAgICAgICAgICAgICAgIHJldHVybiBwaWNrSlNSPE9wZXJhdGlvblR5cGUsIEFy
Z051bSwgSW5kZXggLSAxPihmaXJzdCwgcmVzdC4uLik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIC8vIEZpcnN0IGlzIGVpdGhlciBhbiBldmVuIHJlZ2lzdGVyLCBvciB0
aGlzIGFyZ3VtZW50IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBzdGFjaywgc28gaXQgZG9lcyBub3Qg
bWF0dGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIHBpY2tKU1I8T3BlcmF0aW9uVHlwZSwgQXJn
TnVtLCBJbmRleCAtIDE+KHRoaXJkLCByZXN0Li4uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB1bnNpZ25l
ZCBBcmdOdW0sIHVuc2lnbmVkIEluZGV4ID0gQXJnTnVtLCB0eXBlbmFtZS4uLiBBcmdzPgorICAg
IHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcGlja0pTUihHUFJSZWcgZmlyc3QsIEdQUlJl
ZyBzZWNvbmQpCisgICAgeworICAgICAgICBjb25zdGV4cHIgc2l6ZV90IHNpemVPZkN1cnJlbnRB
cmcgPSBzaXplT2ZBcmc8T3BlcmF0aW9uVHlwZSwgQXJnTnVtIC0gSW5kZXg+KCk7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc2l6ZU9mQ3VycmVudEFyZyA8PSA4LCAiRG9uJ3Qga25vdyBob3cgdG8g
aGFuZGxlIGxhcmdlIGFyZ3VtZW50cyIpOworICAgICAgICAvLyBCYXNlIGNhc2UsICdmaXJzdCcg
YW5kICdzZWNvbmQnIGFyZSBuZXZlciBhcmd1bWVudCByZWdpc3Rlciwgb3Igd2lsbCBiZSBwdXNo
ZWQgb24gdGhlIHN0YWNrIGFueXdheQorICAgICAgICBpZiBjb25zdGV4cHIgKCFJbmRleCkgewor
ICAgICAgICAgICAgaWYgY29uc3RleHByIChzaXplT2ZDdXJyZW50QXJnIDw9IDQpIHsKKyAgICAg
ICAgICAgICAgICBVTlVTRURfUEFSQU0oc2Vjb25kKTsgLy8gT3RoZXJ3aXNlIHdhcm5pbmcgZHVl
IHRvIGNvbnN0ZXhwcgorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVnczo6cGF5bG9h
ZE9ubHkoZmlyc3QpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWVSZWdzIHsgc2Vjb25kLCBmaXJzdCB9OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgY29uc3RleHByKHNpemVPZkN1cnJlbnRBcmcgPD0gNCkgeworICAgICAgICAgICAg
ICAgIFVOVVNFRF9QQVJBTShmaXJzdCk7IC8vIE90aGVyd2lzZSB3YXJuaW5nIGR1ZSB0byBjb25z
dGV4cHIKKyAgICAgICAgICAgICAgICByZXR1cm4gcGlja0pTUjxPcGVyYXRpb25UeXBlLCBBcmdO
dW0sIEluZGV4IC0gMT4oc2Vjb25kKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEX1dJVEhfTUVTU0FHRSgiT3V0IG9mIHJlZ2lz
dGVycyIpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wZXJh
dGlvblR5cGUsIHVuc2lnbmVkIEFyZ051bSwgdW5zaWduZWQgSW5kZXggPSBBcmdOdW0sIHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwaWNrSlNSKEdQ
UlJlZyBmaXJzdCkKKyAgICB7CisgICAgICAgIGNvbnN0ZXhwciBzaXplX3Qgc2l6ZU9mQ3VycmVu
dEFyZyA9IHNpemVPZkFyZzxPcGVyYXRpb25UeXBlLCBBcmdOdW0gLSBJbmRleD4oKTsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzaXplT2ZDdXJyZW50QXJnIDw9IDgsICJEb24ndCBrbm93IGhvdyB0
byBoYW5kbGUgbGFyZ2UgYXJndW1lbnRzIik7CisgICAgICAgIC8vIEJhc2UgY2FzZSwgJ2ZpcnN0
JyBpcyBuZXZlciBhbiBhcmd1bWVudCByZWdpc3Rlciwgb3Igd2lsbCBiZSBwdXNoZWQgb24gdGhl
IHN0YWNrIGFueXdheQorICAgICAgICBpZiBjb25zdGV4cHIgKHNpemVPZkN1cnJlbnRBcmcgPD0g
NCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoZmlyc3QpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRF9XSVRI
X01FU1NBR0UoIk91dCBvZiByZWdpc3RlcnMiKTsKKyAgICB9CisjZW5kaWYKKworcHVibGljOgor
ICAgIC8vIFNlZSBwcmVmZXJyZWRBcmd1bWVudEdQUiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBm
dW5jdGlvbi4gVGhpcyB2ZXJzaW9uIHJldHVybnMgYSBKU1ZhbHVlUmVncworICAgIC8vIGluc3Rl
YWQgb2YgYSBHUFIsIHdoaWNoIG9uIEpTVkFMVUU2NCBhcmUgZXF1aXZhbGVudCwgYnV0IG9uIEpT
VkFMVUUzMl82NCBhIEpTVmFsdWVSZWdzIGlzCisgICAgLy8gcmVxdWlyZWQgdG8gaG9sZCBhIDY0
LWJpdCB3aWRlIGZ1bmN0aW9uIGFyZ3VtZW50LCBzbyB1c2UgdGhpcyBpbiBwYXJ0aWN1bGFyIHdo
ZW4gcGFzc2luZyBhCisgICAgLy8gSlNWYWx1ZS9FbmNvZGVkSlNWYWx1ZSBiZSBjb21wYXRpYmxl
IHdpdGggYm90aCBKU1ZBTFVFNjQgYW4gSlNWQUxVRTMyXzY0IHBsYXRmb3JtcywgYW5kIHVzZQor
ICAgIC8vIHByZWZlcnJlZEFyZ3VtZW50R1BSIHdoZW4gcGFzc2luZyBob3N0IHBvaW50ZXJzLgor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBBcmdOdW0+Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmVuYWJsZV9pZl90PChGdW5jdGlvblRyYWl0czxPcGVy
YXRpb25UeXBlPjo6YXJpdHkgPiBBcmdOdW0pLCBKU1ZhbHVlUmVncz4KKyAgICBwcmVmZXJyZWRB
cmd1bWVudEpTUigpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisjaWYgIU9TKFdJTkRPV1Mp
CisgICAgICAgIHJldHVybiBwaWNrSlNSPE9wZXJhdGlvblR5cGUsIEFyZ051bT4oCisgICAgICAg
ICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIyLAorICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIzLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjQsIEdQUkluZm86OmFyZ3VtZW50R1BSNSk7CisjZWxzZQorICAgICAg
ICByZXR1cm4gcGlja0pTUjxPcGVyYXRpb25UeXBlLCBBcmdOdW0+KAorICAgICAgICAgICAgR1BS
SW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiwKKyAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5mbzo6bm9u
QXJnR1BSMCwgICBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyNlbmRpZgorI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyNpZiBDUFUoQVJNX1RIVU1CMikKKyAgICAgICAgLy8gVGhlIGxhc3QgcmVnaXN0
ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBwdXNoZWQgb250byB0aGUgc3RhY2sgZm9yIGNhbGxzLCBz
byB3ZSBjYW4gdXNlCisgICAgICAgIC8vIHRoZSBsaW5rIHJlZ2lzdGVyIGFzIGEgdGVtcG9yYXJ5
LgorICAgICAgICByZXR1cm4gcGlja0pTUjxPcGVyYXRpb25UeXBlLCBBcmdOdW0+KAorICAgICAg
ICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMiwKKyAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BS
SW5mbzo6cmVnVDcsICAgICAgICBHUFJJbmZvOjpyZWdUNiwKKyAgICAgICAgICAgIEdQUkluZm86
OnJlZ1Q0LCAgICAgICAgR1BSSW5mbzo6cmVnVDUsICAgICAgICBBUk1SZWdpc3RlcnM6OmxyKTsK
KyNlbGlmIENQVShNSVBTKQorICAgICAgICByZXR1cm4gcGlja0pTUjxPcGVyYXRpb25UeXBlLCBB
cmdOdW0+KAorICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwKKyAgICAgICAgICAgIEdQUkluZm86OmFy
Z3VtZW50R1BSMywgR1BSSW5mbzo6cmVnVDIsICAgICAgICBHUFJJbmZvOjpyZWdUMywKKyAgICAg
ICAgICAgIEdQUkluZm86OnJlZ1Q0LCAgICAgICAgR1BSSW5mbzo6cmVnVDUsICAgICAgICBHUFJJ
bmZvOjpyZWdUNik7CisjZW5kaWYKKyNlbmRpZgorICAgIH0KKworICAgIC8vIENvbXB1dGVzIChz
dGF0aWNhbGx5LCBhdCBjb21waWxhdGlvbiB0aW1lKSwgdGhlIGlkZWFsIG1hY2hpbmUgcmVnaXN0
ZXIgYW4gYXJndW1lbnQgc2hvdWxkIGJlCisgICAgLy8gbG9hZGVkIGludG8gZm9yIGEgZnVuY3Rp
b24gY2FsbC4gVGhpcyB5aWVsZHMgdGhlIEFCSSBzcGVjaWZpYyBhcmd1bWVudCByZWdpc3RlcnMg
Zm9yIHRoZQorICAgIC8vIGluaXRpYWwgYXJndW1lbnRzIGFzIGFwcHJvcHJpYXRlLCB0aGVuIHN1
aXRhYmxlIHRlbXBvcmFyeSByZWdpc3RlcnMgZm9yIHRoZSByZW1haW5pbmcKKyAgICAvLyBhcmd1
bWVudHMuIFRoZSBpZGVhIGlzIHRoYXQgJ3NldHVwQXJndW1lbnRzJyB3aWxsIGhhdmUgdG8gZG8g
dGhlIG1pbmltYWwgYW1vdW50IG9mIHdvcmsgd2hlbgorICAgIC8vIHVzaW5nIHRoZXNlIHJlZ2lz
dGVycyB0byBob2xkIHRoZSBhcmd1bWVudHMsIHNvIGlmIHlvdSBhcmUgbG9hZGluZyBtb3N0IGFy
Z3VtZW50cyBmcm9tIG1lbW9yeQorICAgIC8vIGFueXdheSwgdXNpbmcgdGhlc2UgcmVnaXN0ZXJz
IHlpZWxkcyB0aGUgc21hbGxlc3QgY29kZSByZXF1aXJlZCBmb3IgYSBjYWxsLgorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBBcmdOdW0+CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzdGQ6OmVuYWJsZV9pZl90PChGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBl
Pjo6YXJpdHkgPiBBcmdOdW0pLCBHUFJSZWc+CisgICAgcHJlZmVycmVkQXJndW1lbnRHUFIoKQor
ICAgIHsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVP
ZkFyZzxPcGVyYXRpb25UeXBlLCBBcmdOdW0+KCkgPD0gNCwgIkFyZ3VtZW50IGRvZXMgbm90IGZp
dCBpbiBHUFIiKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gcHJlZmVycmVkQXJndW1lbnRKU1I8
T3BlcmF0aW9uVHlwZSwgQXJnTnVtPigpLnBheWxvYWRHUFIoKTsKKyAgICB9CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuaAppbmRleCBhMTc2MjQ0ZTFlMzA5NTY2NzczNDYwYWQyMDY1MGUxOWJjM2RhZDY4Li5i
Y2I1MmU3OWI4ZmU4MjE0MmVlOGRmM2U1MTU1NzM0OWMyNDlkYzAwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCkBAIC00Niw2ICs0Niw3IEBAIHB1
YmxpYzoKIAogICAgIC8vIEFueSByZWdpc3RlciB0aGF0IGhhcyBiZWVuIGxvY2tlZCBvciBhY3F1
aXJlZCBtdXN0IGJlIHJlbGVhc2VkCiAgICAgLy8gYmVmb3JlIGNhbGxpbmcgcHJlcGFyZUZvclRh
aWxDYWxsKCkgb3IgcHJlcGFyZUZvclNsb3dQYXRoKCkuCisgICAgLy8gVW5sZXNzIHlvdSBrbm93
IHRoZSByZWdpc3RlciBpcyBub3QgdGhlIHRhcmdldCBvZiBhIHJlY292ZXJ5LgogICAgIHZvaWQg
bG9ja0dQUihHUFJSZWcgZ3ByKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2xvY2tlZFJlZ2lz
dGVycy5nZXQoZ3ByKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQ
UkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCmluZGV4IDJmN2Nm
NWFiYmIzOTljYTc0NDNlYWM4MzIwMzJmNmMwNzNiNDJiYzkuLmIyMGUzMzFiNTVjZjMyYTEyOTE3
MTkyMDA1M2U4NWM0NGQ1YTEzZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvR1BSSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCkBA
IC02OSwxNSArNjksMjEgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gbV9ncHIgPT0gSW52YWxpZEdQUlJlZzsgfQogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiBtX2dwciAhPSBJbnZhbGlkR1BSUmVnOyB9CiAKLSAgICBib29s
IG9wZXJhdG9yPT0oSlNWYWx1ZVJlZ3Mgb3RoZXIpIHsgcmV0dXJuIG1fZ3ByID09IG90aGVyLm1f
Z3ByOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KEpTVmFsdWVSZWdzIG90aGVyKSB7IHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsgfQorICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oSlNWYWx1
ZVJlZ3Mgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByID09IG90aGVyLm1fZ3ByOyB9CisgICAg
Y29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShKU1ZhbHVlUmVncyBvdGhlcikgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkgY29uc3QgeyBy
ZXR1cm4gbV9ncHI7IH0KLSAgICBHUFJSZWcgdGFnR1BSKCkgY29uc3QgeyByZXR1cm4gSW52YWxp
ZEdQUlJlZzsgfQotICAgIEdQUlJlZyBwYXlsb2FkR1BSKCkgY29uc3QgeyByZXR1cm4gbV9ncHI7
IH0KLSAgICAKLSAgICBib29sIHVzZXMoR1BSUmVnIGdwcikgY29uc3QgeyByZXR1cm4gbV9ncHIg
PT0gZ3ByOyB9CisgICAgY29uc3RleHByIEdQUlJlZyB0YWdHUFIoKSBjb25zdCB7IHJldHVybiBJ
bnZhbGlkR1BSUmVnOyB9CisgICAgY29uc3RleHByIEdQUlJlZyBwYXlsb2FkR1BSKCkgY29uc3Qg
eyByZXR1cm4gbV9ncHI7IH0KICAgICAKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VzKEdQUlJlZyBn
cHIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZ3ByID09IEludmFsaWRHUFJSZWcpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX2dwciA9PSBncHI7CisgICAg
fQorICAgIGNvbnN0ZXhwciBib29sIG92ZXJsYXBzKEpTVmFsdWVSZWdzIG90aGVyKSBjb25zdCB7
IHJldHVybiB1c2VzKG90aGVyLnBheWxvYWRHUFIoKSk7IH0KKwogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKQEAgLTE2Niw3ICsxNzIsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlUmVncyhHUFJSZWcgdGFnR1BSLCBH
UFJSZWcgcGF5bG9hZEdQUikKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MoR1BSUmVnIHRhZ0dQ
UiwgR1BSUmVnIHBheWxvYWRHUFIpCiAgICAgICAgIDogbV90YWdHUFIodGFnR1BSKQogICAgICAg
ICAsIG1fcGF5bG9hZEdQUihwYXlsb2FkR1BSKQogICAgIHsKQEAgLTE3Nyw3ICsxODMsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyhncHIxLCBncHIyKTsKICAgICB9CiAg
ICAgCi0gICAgc3RhdGljIEpTVmFsdWVSZWdzIHBheWxvYWRPbmx5KEdQUlJlZyBncHIpCisgICAg
c3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwYXlsb2FkT25seShHUFJSZWcgZ3ByKQogICAg
IHsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdzKEludmFsaWRHUFJSZWcsIGdwcik7CiAgICAg
fQpAQCAtMTg5LDE1ICsxOTUsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgfHwgc3RhdGljX2Nh
c3Q8R1BSUmVnPihtX3BheWxvYWRHUFIpICE9IEludmFsaWRHUFJSZWc7CiAgICAgfQogCi0gICAg
Ym9vbCBvcGVyYXRvcj09KEpTVmFsdWVSZWdzIG90aGVyKSBjb25zdAorICAgIGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0oSlNWYWx1ZVJlZ3Mgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV90YWdHUFIgPT0gb3RoZXIubV90YWdHUFIKICAgICAgICAgICAgICYmIG1fcGF5bG9h
ZEdQUiA9PSBvdGhlci5tX3BheWxvYWRHUFI7CiAgICAgfQotICAgIGJvb2wgb3BlcmF0b3IhPShK
U1ZhbHVlUmVncyBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAg
ICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KEpTVmFsdWVSZWdzIG90aGVyKSBjb25zdCB7IHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsgfQogICAgIAotICAgIEdQUlJlZyB0YWdHUFIoKSBjb25z
dCB7IHJldHVybiBtX3RhZ0dQUjsgfQotICAgIEdQUlJlZyBwYXlsb2FkR1BSKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXlsb2FkR1BSOyB9CisgICAgY29uc3RleHByIEdQUlJlZyB0YWdHUFIoKSBjb25z
dCB7IHJldHVybiBtX3RhZ0dQUjsgfQorICAgIGNvbnN0ZXhwciBHUFJSZWcgcGF5bG9hZEdQUigp
IGNvbnN0IHsgcmV0dXJuIG1fcGF5bG9hZEdQUjsgfQogICAgIEdQUlJlZyBncHIoV2hpY2hWYWx1
ZVdvcmQgd2hpY2gpIGNvbnN0CiAgICAgewogICAgICAgICBzd2l0Y2ggKHdoaWNoKSB7CkBAIC0y
MTAsOCArMjE2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRhZ0dQUigpOwogICAgIH0K
IAotICAgIGJvb2wgdXNlcyhHUFJSZWcgZ3ByKSBjb25zdCB7IHJldHVybiBtX3RhZ0dQUiA9PSBn
cHIgfHwgbV9wYXlsb2FkR1BSID09IGdwcjsgfQotICAgIAorICAgIGNvbnN0ZXhwciBib29sIHVz
ZXMoR1BSUmVnIGdwcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChncHIgPT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fdGFnR1BS
ID09IGdwciB8fCBtX3BheWxvYWRHUFIgPT0gZ3ByOworICAgIH0KKyAgICBjb25zdGV4cHIgYm9v
bCBvdmVybGFwcyhKU1ZhbHVlUmVncyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB1c2VzKG90aGVyLnBheWxvYWRHUFIoKSkgfHwgdXNlcyhvdGhlci50YWdHUFIoKSk7CisgICAg
fQorCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDZmMmNlZDczMzk2NWE2YjAyYTk3NWJhNDFi
YzNiNzc1MDdiMjgxY2YuLmIxNzljODUxNTBkZDljN2QzOTllMGNjNzNhYTlmZTY0NGJjODEwMDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTgwMCwxMyArODAwLDExIEBAIHZvaWQg
SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
aW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3Vt
ZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwotICAgICAgICAgICAgICAgIGxvYWQ2NChBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBvZmZzZXQpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAgICAgICAg
Y29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgeyByZWdUMCB9OwogI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhj
YWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAgICAgICAgICAg
IGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAg
ICAgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRSZWdzIHsgcmVnVDEsIHJlZ1Qw
IH07CiAjZW5kaWYKKyAgICAgICAgICAgICAgICBsb2FkVmFsdWUoQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3Rlciwgb2Zmc2V0KSwgcmVzdWx0UmVncyk7CiAgICAgICAgICAgICAgICAgc3RvcmVWYWx1
ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2Zp
bGUpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtOTM5LDcgKzkzNyw2IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAg
IH0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0
byYgZ2VuZXJhdG9ycykgewogICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsK
ICAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOwpAQCAtOTU5LDMx
ICs5NTYsMTAgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIGZpbmFsaXplSUNzKG1faW5CeVZhbHMp
OwogICAgIGZpbmFsaXplSUNzKG1faW5zdGFuY2VPZnMpOwogICAgIGZpbmFsaXplSUNzKG1fcHJp
dmF0ZUJyYW5kQWNjZXNzZXMpOwotI2Vsc2UKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dl
dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZh
bHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0
aFRoaXMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRz
LCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIHBh
dGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1
ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVy
KTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMsIHBhdGNoQnVmZmVyKTsKLSNl
bmRpZgogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlv
bkluZm8pIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5m
byYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CiAgICAgICAg
IGluZm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKLSNlbHNlCi0gICAgICAgIENhbGxM
aW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBp
bmZvLnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
PEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRp
b25JbmZvLmRvbmVMb2NhdGlvbikpOwotI2VuZGlmCi0KICAgICB9CiAKICAgICBKSVRDb2RlTWFw
QnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDgx
YTk5ZGExOGQwOWQ3MDhhZGJlOWM3ZjBhOGQ4ZTY5YzNmYjFlYjAuLjQ2OWQzZTA4MjY5NzdhZDIz
ZmYxMTFkNWE2ZWZkOGUxZWNiMDA4ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMTUy
LDEzICsxNTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRp
b25JbmZvIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRD
YWxsTGlua0luZm87CiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJ
bmZvQ29uc3RhbnQ7Ci0jZWxzZQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1Bh
dGhTdGFydDsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87Ci0jZW5kaWYKICAg
ICB9OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVz
c1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CkBA
IC0yOTQsNyArMjg5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY29tcGlsZU9w
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQorCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAog
ICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2Rl
SUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMwNiwxOSArMzAxLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9w
OjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3Rh
bnQpOwotI2Vsc2UKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8Ci0gICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwotICAgICAgICAgICAgJiYg
T3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOwotCi0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgotICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAotICAgICAgICAgICAgT3A6Om9w
Y29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MKLSAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFy
YXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0g
ICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8q
KTsKLSNlbmRpZgogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29s
IGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwpAQCAtNDI2
LDYgKzQwOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82
NCkKIAorICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChKU1ZhbHVlUmVn
cyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKEpTVmFsdWVSZWdz
LCBWaXJ0dWFsUmVnaXN0ZXIpOworCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlv
bmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJl
bGF0aW9uYWxDb25kaXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5k
ZXggZmM4MWE1ZTkwYjQ3OWZhZGI2NzYwMzAxNzU5Mjc1MTEzNzMwODQwNy4uMzQ3ZTYwZTFmZDk5
ZmM4Y2IwMmEzODYxOTNjNWVhMzZkMGNmNjVmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBF
TkFCTEUoSklUKQotI2lmIFVTRShKU1ZBTFVFNjQpCisKICNpbmNsdWRlICJKSVQuaCIKIAogI2lu
Y2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCkBAIC00MiwxMyArNDIsNDMg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSB7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmV0dXJuVmFsdWVKU1IgeyBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiB9OworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgeyBHUFJJ
bmZvOjpyZWdUMCB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MgcmV0dXJuVmFsdWVKU1IgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSIH07CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpT
UiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9OworI2VuZGlmCit9CisKK3ZvaWQg
SklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoY2FsbEZyYW1lUmVnaXN0
ZXIpKTsKKworICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSIChyZXR1
cm5WYWx1ZUdQUjIvcmV0dXJuVmFsdWVHUFIgb24gMzItYml0KS4KKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlSlNSKTsKKworI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwor
ICAgIHJldCgpOworI2Vsc2UKKyAgICBlbWl0TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0dWIo
b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpLmNvZGUoKSk7CisjZW5kaWYKK30KKworCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0
ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZXR1cm5WYWx1ZUpTUik7CiB9
CiAKKwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpv
cGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVj
dF92YXJhcmdzCkBAIC02MiwxMCArOTIsMTIgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiAKIAogICAgIGlmIChP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQg
KyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKLSAg
ICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAg
ICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJy
YXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgp
KTsKKyAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHRtcEpTUiA9IHJldHVyblZhbHVlSlNS
OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHRtcEdQUiA9IHRtcEpTUi5wYXlsb2FkR1BSKCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVy
T2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCB0bXBK
U1IpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwodG1wSlNSKTsKKyAgICAg
ICAgbG9hZDMyKEFkZHJlc3ModG1wSlNSLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgdG1wR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBi
eXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50
Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZz
ZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAg
ICB9CiAKQEAgLTczLDcgKzEwNSw2IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpcyksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKTsKIH0KIAotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTg2LDI5ICsxMTcsNDkgQEAgSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY2FsbExpbmtJbmYKICAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2Zp
cnN0RnJlZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVhbCByZWdpc3Rl
ciBpZiB3ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0
ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzLCByZWdUMSk7Ci0gICAgWl9KSVRPcGVyYXRpb25fR0paWiBzaXplT3BlcmF0aW9u
OwotICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KQotICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFy
Z3VtZW50czsKLSAgICBlbHNlCi0gICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXpl
RnJhbWVGb3JWYXJhcmdzOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIs
IGZpcnN0VmFyQXJnT2Zmc2V0KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVn
aXN0ZXIpLCByZWdUMSk7Ci0gICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFs
dWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOworICAgIHsKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxaX0pJVE9wZXJhdGlv
bl9HSlpaLCAwPigpOworICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzSlNS
ID0gcHJlZmVycmVkQXJndW1lbnRKU1I8Wl9KSVRPcGVyYXRpb25fR0paWiwgMT4oKTsKKworICAg
ICAgICBaX0pJVE9wZXJhdGlvbl9HSlpaIHNpemVPcGVyYXRpb247CisgICAgICAgIGlmIChPcDo6
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAgICAgICAg
c2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJh
bWVGb3JWYXJhcmdzOworCisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BS
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0pT
Uik7CisgICAgICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgZ2xvYmFsT2JqZWN0R1BS
LCBhcmd1bWVudHNKU1IsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7Cisg
ICAgICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwg
cmVnVDEsIHJlZ1QxKTsKKyAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVn
VDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFy
Z3VtZW50cywgcmVnVDIpOwotICAgIEZfSklUT3BlcmF0aW9uX0dGSlpaIHNldHVwT3BlcmF0aW9u
OwotICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KQotICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50
c0ZyYW1lOwotICAgIGVsc2UKLSAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1
cFZhcmFyZ3NGcmFtZTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKHNldHVwT3BlcmF0aW9uLCByZWdUMywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09m
ZnNldCwgcmVnVDApOwotICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKKyNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVz
KCksIDYgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
I2VuZGlmCisKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgY29uc3RleHByIEpT
VmFsdWVSZWdzIGFyZ3VtZW50c0pTUiB7IHJlZ1QyIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzSlNSIHsgcmVnVDMsIHJl
Z1QyIH07CisjZW5kaWYKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50
cywgYXJndW1lbnRzSlNSKTsKKyAgICAgICAgRl9KSVRPcGVyYXRpb25fR0ZKWlogc2V0dXBPcGVy
YXRpb247CisgICAgICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzKQorICAgICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZv
cndhcmRBcmd1bWVudHNGcmFtZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0dXBPcGVy
YXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUNCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1Q0
LCByZWdUMSwgYXJndW1lbnRzSlNSLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUNSk7CisgICAgfQogCiAgICAgLy8gUHJvZmlsZSB0
aGUgYXJndW1lbnQgY291bnQuCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7CisgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDUsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7CiAg
ICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CiAgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpKSwgcmVnVDMpOwogICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFi
b3ZlLCByZWdUMywgcmVnVDIpOwpAQCAtMTE2LDEwICsxNjcsMTEgQEAgSklUOjpjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2Fs
bExpbmtJbmYKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlh
bGl6ZSAndGhpcycuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHJlZ1Qw
KTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyB0aGlzSlNSID0gY2FsbGVlSlNSOyAvLyBVc2VkIGFzIHRl
bXBvcmFyeSByZWdpc3RlcgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVlLCB0
aGlzSlNSKTsKKyAgICBzdG9yZVZhbHVlKHRoaXNKU1IsIEFkZHJlc3MocmVnVDUsIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUNSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEzOSw3ICsxOTEsNyBAQCBib29sIEpJ
VDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2RlKQogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7
CiAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJldHVyblZhbHVlSlNSKSk7CiAKICAgICBlbWl0
UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiAKQEAgLTE1OCw3ICsyMTAsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0NhcwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAq
IHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCi0gICAgbG9hZDY0KEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7CisgICAgbG9hZFZhbHVlKEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVT
bG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsZWVKU1IpOwogICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwogICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3Zp
bmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOwogICAgIHJlc2V0U1AoKTsKQEAgLTE3OCw3ICsy
MzAsOSBAQCBib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVj
b2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
RnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZm
bGVEYXRhPigpOwogICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9h
cmdjOwogICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpOworI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgc2h1ZmZsZURhdGEt
Pm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisjZW5kaWYK
ICAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICBzaHVmZmxl
RGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKQEAgLTE4OCwxMiArMjQyLDE5IEBA
IGJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAg
ICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBW
YWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxs
ZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxl
ZUpTUi50YWdHUFIoKSwgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSk7CisjZW5kaWYKICAgICBzaHVm
ZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBsb2FkQ29uc3RhbnQo
Y2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBD
YWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVn
VDIsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSID0gcmVnVDI7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCBjYWxs
TGlua0luZm9HUFIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1p
dFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNh
bGxMaW5rSW5mb0dQUiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgc2h1ZmZsZXIg
eyAqdGhpcywgKnNodWZmbGVEYXRhIH07CisgICAgICAgIHNodWZmbGVyLmxvY2tHUFIoY2FsbExp
bmtJbmZvR1BSKTsKKyAgICAgICAgc2h1ZmZsZXIucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAg
fSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIApAQCAtMjQ2LDIwICszMDcsMjcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
YWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgotICAgIHN0b3JlNjQocmVnVDAs
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlSlNSKTsKKyAg
ICBzdG9yZVZhbHVlKGNhbGxlZUpTUiwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAt
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChi
eXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
Ly8gV2UgbmVlZCB0aGlzIG9uIEpTVkFMVUUzMl82NCBvbmx5IGFzIG9uIEpTVkFMVUU2NCBhIHBv
aW50ZXIgY29tcGFyaXNvbiBpbiB0aGUgRGF0YUlDIGZhc3QKKyAgICAvLyBwYXRjaCBjYXRjaGVz
IHRoaXMuCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUpTUikpOworI2Vu
ZGlmCisKICAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0lu
Zm9JbmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbG9hZENvbnN0
YW50KGluZm9Db25zdGFudCwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSID0gcmVnVDI7CisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgY2FsbExpbmtJ
bmZvR1BSKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8g
c2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5r
SW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2Fk
R1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKLSAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwor
ICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhjYWxsTGlua0luZm9HUFIpOwogICAg
ICAgICB9KTsKICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICAgICAgYXV0byBk
b25lTG9jYXRpb24gPSBsYWJlbCgpOwpAQCAtMjY3LDcgKzMzNSw3IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9
IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwor
ICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRo
aXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgYXV0byBk
b25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKQEAg
LTQwMywyMCArNDcxLDI0IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogCiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9y
T3Blbj4oaW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRv
TmV4dENoZWNrcG9pbnQoKTsKLSAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3IpIGlzIGluIHJl
Z1QwCisKKyAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3IpIGlzIGluIHJldHVyblZhbHVlSlNS
CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmV0dXJuVmFsdWVKU1IpOworCisg
ICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFyZXR1cm5W
YWx1ZUpTUi51c2VzKHN0dWJJbmZvR1BSKSk7CisgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1
ZUpTUiA9PSBiYXNlSlNSKTsgLy8gT3RoZXJ3aXNlIHdpbGwgbmVlZCBtb3ZlKHJldHVyblZhbHVl
SlNSLCBiYXNlSlNSKQorICAgIHN0YXRpY19hc3NlcnQoYmFzZUpTUiA9PSByZXN1bHRKU1IpOwog
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0
OwotICAgIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwotCi0gICAgbW92ZShyZWdU
MCwgYmFzZUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBiYXNlSlNSLCByZXN1bHRKU1IsIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CkBAIC00MzAsOCArNTAyLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCiAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0SlNSKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVzdWx0SlNSKTsKIAog
ICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CkBAIC00NDMsMTAgKzUxNSwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93QwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1w
KCkpOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBHUFJSZWcgaXRlcmF0b3JH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgSlNWYWx1ZVJlZ3MgaXRl
cmF0b3JKU1IgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1I7CiAgICAgSnVtcExp
c3Qgbm90T2JqZWN0OwotICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJh
dG9yR1BSKSk7Ci0gICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRv
ckdQUikpOworICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9ySlNS
KSk7CisgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckpTUi5w
YXlsb2FkR1BSKCkpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
dGVyYXRvck9wZW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG5leHRWUmVnID0gYnl0ZWNvZGUu
bV9uZXh0OwpAQCAtNDU2LDEwICs1MjgsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0MKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIG1vdmUoaXRlcmF0
b3JHUFIsIGFyZ3VtZW50R1BSMik7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICB1
c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIGFyZzJKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0
aW9uLCAyPigpOworCisgICAgbW92ZVZhbHVlUmVncyhpdGVyYXRvckpTUiwgYXJnMkpTUik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxTbG93T3BlcmF0aW9uPigKKyAgICAgICAgYnl0ZWNvZGUs
CisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIG5leHRWUmVnLAorICAgICAgICBnbG9iYWxPYmpl
Y3RHUFIsIHN0dWJJbmZvR1BSLCBhcmcySlNSLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAogICAgIGF1dG8g
ZG9uZSA9IGp1bXAoKTsKQEAgLTQ4Myw4ICs1NjUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAgICAgIH0KICAg
ICB9KSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIHJl
Z1QwKTsKLSAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShyZWdUMCk7Cisg
ICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBuZXh0
SlNSID0gYmFzZUpTUjsgLy8gVXNlZCBhcyB0ZW1wb3JhcnkgcmVnaXN0ZXIKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgbmV4dEpTUik7CisgICAgSnVtcCBnZW5l
cmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHkobmV4dEpTUik7CiAKICAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAg
IHNsb3dQYXRoQ2FsbC5jYWxsKCk7CkBAIC00OTYsMjQgKzU4NCwyMiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKICAgICBz
dG9yZThUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRh
OjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9m
ZnNldE9mU2Vlbk1vZGVzKCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGlu
c3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVj
a3BvaW50KCk7Ci0gICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkg
aW4gcmVnVDAKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxS
ZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7
Ci0gICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgIC8vIGNh
bGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwICAocmVnVDEvcmVn
VDAgb3IgMzItYml0KQorICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoc3R1
YkluZm9HUFIpKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBpdGVyQ2Fs
bFJlc3VsdEpTUiA9IGRvbnRDbG9iYmVySlNSOworICAgIG1vdmVWYWx1ZVJlZ3MocmV0dXJuVmFs
dWVKU1IsIGl0ZXJDYWxsUmVzdWx0SlNSKTsKKworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBk
b25lSlNSID0gcmVzdWx0SlNSOwogICAgIHsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOwotCi0gICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJldHVyblZhbHVlSlNSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdz
ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVz
ZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3Mu
c2V0KGl0ZXJDYWxsUmVzdWx0SlNSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
CiAgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+
ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiks
IHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5h
bWVzLT5kb25lLmltcGwoKSksIHJldHVyblZhbHVlSlNSLCBkb25lSlNSLCBzdHViSW5mb0dQUiwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwogICAgICAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CkBAIC01MjcsMjggKzYxMywyNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbikKICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1Zh
bHVlUmVncyB7IGRvbmVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgZG9uZUpTUik7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kb25lLCBkb25lSlNSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsK
ICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQ
UiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
KGRvbmVKU1IsIGl0ZXJDYWxsUmVzdWx0SlNSKTsKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CiAgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGZhbHNlOwogICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7Ci0g
ICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbEdQUik7CisgICAgICAgIEp1
bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBkb25lSlNSLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAg
ICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOworICAgICAgICBtb3ZlVmFsdWVS
ZWdzKGl0ZXJDYWxsUmVzdWx0SlNSLCBiYXNlSlNSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKICAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgp
KSwgYmFzZUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
CiAKICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOwogICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkdldEJ5SWQ7CkBAIC01NjIsOCArNjQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAgICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0SlNS
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1
bHRKU1IpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01
NzcsNyArNjYxLDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDCiAgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsK
IAotICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpkb250Q2xvYmJlckpTUjsKKworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBpdGVyQ2Fs
bFJlc3VsdEpTUiA9IGRvbnRDbG9iYmVySlNSOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CkBAIC01ODUsMjUgKzY3MiwzNCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93QwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVu
ZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRKU1IpKTsKIAogICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgp
OwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2Fs
bFJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0
KGl0ZXJDYWxsUmVzdWx0SlNSLnBheWxvYWRHUFIoKSkpOwogCi0gICAgICAgIG1vdmUoaXRlckNh
bGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKLSAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBkb25lVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKKyAgICAgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNs
b3dPcGVyYXRpb24sIDE+KCk7CisgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBhcmcySlNS
ID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKIAorICAgICAgICBt
b3ZlVmFsdWVSZWdzKGl0ZXJDYWxsUmVzdWx0SlNSLCBhcmcySlNSKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlPFNsb3dPcGVyYXRpb24+KAorICAgICAgICAgICAgYnl0ZWNv
ZGUsCisgICAgICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICAgICAgZG9uZVZSZWcsCisgICAgICAg
ICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBhcmcySlNSLAorICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGRvbmVWUmVnLCBkb25lR1BSKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBkb25lSlNSID0gcmVzdWx0SlNSOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGRvbmVWUmVnLCBkb25lSlNSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEpTUik7CiAgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRo
aXMpOwpAQCAtNjIwLDE1ICs3MTYsMjQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0MKIAogICAg
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBtb3ZlKGl0ZXJD
YWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOwotICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7Ci0gICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
KS5yYXdCaXRzKCkpOworICAgICAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8
U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFyZzJK
U1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAgICAg
IG1vdmVWYWx1ZVJlZ3MoaXRlckNhbGxSZXN1bHRKU1IsIGFyZzJKU1IpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KT4oCisgICAgICAgICAgICBieXRlY29kZSwKKyAgICAgICAgICAgIEFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAg
ICAgICB2YWx1ZVZSZWcsCisgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BS
LCBhcmcySlNSLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4N2Y5YjkwYTViZGYxMzdkN2Y4MWM5NGJhMWY5ZjZmMDgz
MDY5MzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNjM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhLCBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSNpbmNsdWRlICJKSVQuaCIKLQotI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIu
aCIKLSNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgotI2luY2x1ZGUgIk9wY29kZUlubGluZXMuaCIKLSNpbmNsdWRlICJSZXN1bHRU
eXBlLmgiCi0jaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKLSNpbmNsdWRlICJTbG93UGF0
aENhbGwuaCIKLSNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgotI2luY2x1ZGUgIlRodW5rR2Vu
ZXJhdG9ycy5oIgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdFB1dENhbGxS
ZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGVtaXRTdG9yZShkZXN0
aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVh
bFJlZ2lzdGVyKCksIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3JldChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0KLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEs
IHJlZ1QwKTsKLQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgcmV0
KCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxFdmFsPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgpOwotfQotIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0gICAgCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0gICAgCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BD
YWxsPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsPE9wVGFpbENhbGw+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgY29tcGlsZU9wQ2FsbDxPcENhbGxFdmFsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExp
bmtJbmZvSW5kZXgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsPE9w
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsPE9wVGFpbENhbGxW
YXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGw8T3BUYWls
Q2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKLX0KLSAgICAKLXZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wQ2Fs
bDxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKLX0KLSAgICAKLXZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGw8T3BDb25z
dHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotc3RkOjplbmFibGVfaWZfdDwKLSAgICBPcDo6b3Bjb2Rl
SUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFy
YXJncwotICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0sIHZvaWQ+Ci1KSVQ6
OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKLXsK
LSAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsK
LSAgICBpbnQgYXJnQ291bnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29k
ZSwgY2hlY2twb2ludCk7Ci0gICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGlu
dD4oc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsK
LQotICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKLSAgICAgICAgZW1pdExvYWQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsg
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCwgcmVnVDEp
OwotICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDAp
OwotICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0
YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVy
ZUlEKCkpOwotICAgICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgfQotCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ0NvdW50KSwgQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXN0ZDo6
ZW5hYmxlX2lmX3Q8Ci0gICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6
b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKLSAgICB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cwotLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykKLXsKLSAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IE9wOjpvcGNvZGVJRDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUu
bV90aGlzVmFsdWU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1f
YXJndW1lbnRzOwotICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLm1fZmlyc3RG
cmVlLm9mZnNldCgpOwotICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGJ5dGVjb2RlLm1fZmly
c3RWYXJBcmc7Ci0KLSAgICBlbWl0TG9hZChhcmd1bWVudHMsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
Wl9KSVRPcGVyYXRpb25fR0paWiBzaXplT3BlcmF0aW9uOwotICAgIGlmIChPcDo6b3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQotICAgICAgICBzaXplT3BlcmF0aW9u
ID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsKLSAgICBlbHNlCi0gICAg
ICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNh
bGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIC1maXJzdEZyZWVSZWdpc3RlciwgZmly
c3RWYXJBcmdPZmZzZXQpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3Rl
ciksIHJlZ1QxKTsKLSAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
UiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdu
bWVudEJ5dGVzKCksIDYgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwotICAgIGVtaXRMb2FkKGFyZ3VtZW50cywgcmVnVDIsIHJlZ1Q0KTsKLSAgICBGX0pJ
VE9wZXJhdGlvbl9HRkpaWiBzZXR1cE9wZXJhdGlvbjsKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQotICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9w
ZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwotICAgIGVsc2UKLSAgICAgICAgc2V0
dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0
aW9uKHNldHVwT3BlcmF0aW9uLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
cmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUNCksIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdU
MCk7Ci0gICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwotCi0gICAgLy8gUHJvZmlsZSB0
aGUgYXJndW1lbnQgY291bnQuCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFk
ZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1w
IG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMy
KHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsK
LSAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSAndGhp
cycuCi0gICAgZW1pdExvYWQodGhpc1ZhbHVlLCByZWdUMiwgcmVnVDApOwotICAgIHN0b3JlMzIo
cmVnVDAsIEFkZHJlc3MocmVnVDEsIFBheWxvYWRPZmZzZXQgKyAoQ2FsbEZyYW1lOjp0aGlzQXJn
dW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKSk7Ci0g
ICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMSwgVGFnT2Zmc2V0ICsgKENhbGxGcmFtZTo6
dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSkpOwotICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29u
c3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCi17Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0KLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwotCi0gICAgZW1pdFB1dENhbGxSZXN1bHQo
Ynl0ZWNvZGUpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsK
LSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBpbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7Ci0KLSAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAt
Ynl0ZWNvZGUubV9hcmd2OwotICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5t
X2NhbGxlZTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQotICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7Ci0KLSAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCi17
Ci0gICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0g
Y2FsbGVlRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKTsKLQotICAg
IC8qIENhbGxlciBhbHdheXM6Ci0gICAgICAgIC0gVXBkYXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0
byBjYWxsZWUgY2FsbEZyYW1lLgotICAgICAgICAtIEluaXRpYWxpemVzIEFyZ3VtZW50Q291bnQ7
IENhbGxlckZyYW1lOyBDYWxsZWUuCi0KLSAgICAgICBGb3IgYSBKUyBjYWxsOgotICAgICAgICAt
IENhbGxlZSBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgotICAgICAgICAtIENhbGxl
ZSByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBiZWZvcmUgcmV0dXJuLgotCi0gICAgICAgRm9y
IGEgbm9uLUpTIGNhbGw6Ci0gICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBD
b2RlQmxvY2suCi0gICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFm
dGVyIHJldHVybi4KLSAgICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0g
ICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fcHJvZmls
ZWRDb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkp
OwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKLSAgICAvLyBTUCBob2xk
cyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRD
b3VudCBpbml0aWFsaXplZC4KLSAgICAKLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKLSAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKLSAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1Qx
LCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWUuCi0KLSAgICBzdG9yZTMyKHJl
Z1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpKTsKLQotICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNv
ZGVJRCksIHJlZ1QwKTsKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9
PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChD
YWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMSkpOwotCi0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
LSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cykgewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KCp0aGlzLCByZWdUMCwgWyZdIHsKLSAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKLSAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwotICAgICAgICB9
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKLSAgICAgICAgYXV0byBkb25lTG9j
YXRpb24gPSBsYWJlbCgpOwotICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCBy
ZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7Ci0gICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGhzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0KLSAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29k
ZSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKLXsKLSAg
ICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKLQotICAgIGlmIChvcGNvZGVJRCA9
PSBvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoaW5zdHJ1
Y3Rpb24sIGl0ZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKLSAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsK
LQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKSB7Ci0gICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
KQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+
KCk7Ci0gICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7Ci0gICAgICAgIHN3aXRj
aCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKLSAgICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBp
dGVyYXRvcl9vcGVuX3RyeV9mYXN0X25hcnJvdzsKLSAgICAgICAgY2FzZSBXaWRlMTY6IHJldHVy
biBpdGVyYXRvcl9vcGVuX3RyeV9mYXN0X3dpZGUxNjsKLSAgICAgICAgY2FzZSBXaWRlMzI6IHJl
dHVybiBpdGVyYXRvcl9vcGVuX3RyeV9mYXN0X3dpZGUzMjsKLSAgICAgICAgZGVmYXVsdDogUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0pKCk7Ci0KLSAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVu
Y3Rpb24pOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci0gICAgSnVtcCBmYXN0Q2FzZSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKLQotICAgIGNv
bXBpbGVPcENhbGw8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwotCi0gICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKLSAgICAKLSAgICAvLyBj
YWxsIHJlc3VsdCAoaXRlcmF0b3IpIGlzIGluIHJlZ1QxICh0YWcpL3JlZ1QwIChwYXlsb2FkKQot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsK
LSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwotCi0gICAgR1BS
UmVnIHRhZ0l0ZXJhdG9yR1BSID0gcmVnVDE7Ci0gICAgR1BSUmVnIHBheWxvYWRJdGVyYXRvckdQ
UiA9IHJlZ1QwOwotCi0gICAgR1BSUmVnIHRhZ05leHRHUFIgPSB0YWdJdGVyYXRvckdQUjsKLSAg
ICBHUFJSZWcgcGF5bG9hZE5leHRHUFIgPSBwYXlsb2FkSXRlcmF0b3JHUFI7Ci0KLSAgICBKU1Zh
bHVlUmVncyBuZXh0UmVncyA9IEpTVmFsdWVSZWdzKHRhZ05leHRHUFIsIHBheWxvYWROZXh0R1BS
KTsKLQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLAotICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKLSAgICAgICAgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3ModGFnSXRlcmF0b3JHUFIsIHBheWxvYWRJdGVyYXRvckdQUiksCi0gICAgICAgIG5leHRSZWdz
LAotICAgICAgICBJbnZhbGlkR1BSUmVnLAotICAgICAgICBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
LSAgICAKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgbmV4dFJlZ3MpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBuZXh0UmVncyk7Ci0KLSAgICBmYXN0Q2Fz
ZS5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwotICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1w
KCkpOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyB0YWdJdGVy
YXRvckdQUiA9IHJlZ1QxOwotICAgIEdQUlJlZyBwYXlsb2FkSXRlcmF0b3JHUFIgPSByZWdUMDsK
LQotICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbCh0YWdJdGVyYXRvckdQUikpOwotICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RPYmplY3QocGF5bG9hZEl0ZXJhdG9yR1BSKSk7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBuZXh0
VlJlZyA9IGJ5dGVjb2RlLm1fbmV4dDsKLSAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2
bSgpLnByb3BlcnR5TmFtZXMtPm5leHQuaW1wbCgpOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZSgKLSAgICAgICAgYnl0ZWNvZGUsCi0gICAgICAgIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgLy8gb3BlcmF0aW9uCi0gICAgICAgIG5leHRWUmVnLCAvLyByZXN1bHQKLSAgICAg
ICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8v
IGFyZzEKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKLSAgICAgICAgSlNWYWx1ZVJl
Z3ModGFnSXRlcmF0b3JHUFIsIHBheWxvYWRJdGVyYXRvckdQUiksIC8vIGFyZzMKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsgLy8gYXJnNAotICAgIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgYXV0byBkb25lID0ganVtcCgpOwotCi0gICAgbm90T2Jq
ZWN0LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9y
UmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAg
ICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKLSAgICAgICAgc3dpdGNoIChpbnN0
cnVjdGlvbi0+d2lkdGgoKSkgewotICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9y
X25leHRfdHJ5X2Zhc3RfbmFycm93OwotICAgICAgICBjYXNlIFdpZGUxNjogcmV0dXJuIGl0ZXJh
dG9yX25leHRfdHJ5X2Zhc3Rfd2lkZTE2OwotICAgICAgICBjYXNlIFdpZGUzMjogcmV0dXJuIGl0
ZXJhdG9yX25leHRfdHJ5X2Zhc3Rfd2lkZTMyOwotICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfSkoKTsKLQotICAgIEpTVmFsdWVS
ZWdzIG5leHRSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQsIG5leHRSZWdzKTsKLSAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNo
SWZOb3RFbXB0eShuZXh0UmVncyk7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwotICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7Ci0gICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0
aW9uTW9kZTo6R2VuZXJpYykpKTsKLQotICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAg
bG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRP
ZlNlZW5Nb2RlcygpLCByZWdUMCk7Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7Ci0gICAgc3RvcmU4VG9N
ZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNl
ZW5Nb2RlcygpKTsKLSAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlv
biwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLSAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
OwotICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1Qx
LCByZWdUMAotCi0gICAgR1BSUmVnIHRhZ1ZhbHVlR1BSID0gcmVnVDE7Ci0gICAgR1BSUmVnIHBh
eWxvYWRWYWx1ZUdQUiA9IHJlZ1QwOwotICAgICAgICAKLSAgICBHUFJSZWcgdGFnRG9uZUdQUiA9
IHJlZ1Q1OwotICAgIEdQUlJlZyBwYXlsb2FkRG9uZUdQUiA9IHJlZ1Q0OwotCi0gICAgewotICAg
ICAgICBKU1ZhbHVlUmVncyBkb25lUmVncyA9IEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxv
YWREb25lR1BSKTsKLQotICAgICAgICBHUFJSZWcgdGFnSXRlclJlc3VsdEdQUiA9IHJlZ1QzOwot
ICAgICAgICBHUFJSZWcgcGF5bG9hZEl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKLSAgICAgICAgCi0g
ICAgICAgIC8vIGl0ZXJSZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0
IGJ5IGlkIGJlbG93LgotICAgICAgICBtb3ZlKHJlZ1QxLCB0YWdJdGVyUmVzdWx0R1BSKTsKLSAg
ICAgICAgbW92ZShyZWdUMCwgcGF5bG9hZEl0ZXJSZXN1bHRHUFIpOwotCi0gICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0YWdJdGVyUmVzdWx0R1BSKTsKLQotICAgICAgICBSZWdp
c3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh0YWdWYWx1ZUdQUik7Ci0gICAgICAg
IHByZXNlcnZlZFJlZ3MuYWRkKHBheWxvYWRWYWx1ZUdQUik7Ci0gICAgICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywKLSAgICAgICAg
ICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAotICAgICAgICAgICAgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLAotICAgICAgICAgICAgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLAotICAgICAgICAgICAgcHJlc2VydmVkUmVncywKLSAgICAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
dm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksCi0gICAgICAgICAgICBKU1ZhbHVlUmVn
cyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksCi0gICAgICAgICAgICBk
b25lUmVncywKLSAgICAgICAgICAgIEludmFsaWRHUFJSZWcsCi0gICAgICAgICAgICBBY2Nlc3NU
eXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwotCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IGRvbmVSZWdzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rv
bmUsIGRvbmVSZWdzKTsKLSAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKLSAgICB9
Ci0KLSAgICB7Ci0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyh0
YWdWYWx1ZUdQUiwgcGF5bG9hZFZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHRhZ0l0ZXJSZXN1
bHRHUFIgPSByZWdUMTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWRJdGVyUmVzdWx0R1BSID0gcmVn
VDA7Ci0KLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDY7Ci0gICAgICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1Q3OwotICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0g
YnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModGFnRG9uZUdQUiwgcGF5bG9hZERvbmVH
UFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
OwotCi0gICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywKLSAgICAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAotICAgICAg
ICAgICAgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICAgICAgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLAotICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnBy
b3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJ
dGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksCi0gICAgICAgICAgICByZXN1bHRS
ZWdzLAotICAgICAgICAgICAgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAgIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7Ci0KLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0UmVncyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgcmVzdWx0UmVncyk7Ci0KLSAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwotICAg
IH0KLQotICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wSXRlcmF0b3JOZXh0PigpOwotICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRv
bmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcgdGFnVmFsdWVHUFIgPSBy
ZWdUMTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWRWYWx1ZUdQUiA9IHJlZ1QwOwotICAgICAgICAg
ICAgCi0gICAgICAgIEdQUlJlZyB0YWdJdGVyUmVzdWx0R1BSID0gcmVnVDM7Ci0gICAgICAgIEdQ
UlJlZyBwYXlsb2FkSXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgICAgICAKLSAgICAgICAgR1BS
UmVnIHRhZ0RvbmVHUFIgPSByZWdUNTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWREb25lR1BSID0g
cmVnVDQ7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAgICAgSnVtcExp
c3Qgbm90T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh0
YWdJdGVyUmVzdWx0R1BSKSk7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RP
YmplY3QocGF5bG9hZEl0ZXJSZXN1bHRHUFIpKTsKLQotICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwotICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAg
ICAgICAKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICAgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAgYnl0ZWNv
ZGUsCi0gICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgot
ICAgICAgICAgICAgZG9uZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0
cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKLSAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJ
dGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKLSAgICAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQp
LnJhd0JpdHMoKSk7IC8vIGFyZzQKLQotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVW
UmVnLCBKU1ZhbHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9uZUdQUikpOwotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIEpTVmFsdWVSZWdzKHRhZ1Zh
bHVlR1BSLCBwYXlsb2FkVmFsdWVHUFIpKTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KGp1bXAoKSk7Ci0KLSAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0
LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Ci0g
ICAgfQotCi0gICAgeyAgIAotICAgICAgICBHUFJSZWcgdGFnSXRlclJlc3VsdEdQUiA9IHJlZ1Qx
OwotICAgICAgICBHUFJSZWcgcGF5bG9hZEl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKLQotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVW
UmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLQotICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRl
bnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKLSAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLQotICAgICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgICAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoCi0gICAgICAgICAgICBieXRlY29kZSwKLSAgICAgICAg
ICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCi0gICAgICAgICAgICB2
YWx1ZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKLSAgICAgICAgICAgIGdlbi5zdHVi
SW5mbygpLCAvLyBhcmcyCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0R1BS
LCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKLSAgICAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7
IC8vIGFyZzQKLQotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBVU0Uo
SlNWQUxVRTMyXzY0KQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCmluZGV4IDY2YmM2Nzc4Njg2MmMxMWM3MTdjODBlZWMzOGUxYmIyNTg5OTY5YmEu
LjhlNGNlMDNmOGVlZWMzNDBiYjY2NmY1Mjc5YTY4NzZkYzJjNjg4NjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5oCkBAIC0xNjIsMTIgKzE2Miw4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewotI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGppdFR5
cGUpOwotI2VuZGlmCiAgICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VEYXRhSUNJbk9w
dGltaXppbmdKSVQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKaW5kZXggMWYzNGMzZDFkY2ZmNTJlMDZhMjgyMTU3MTE4
MmY5MmZmZmU4YzAyMS4uYmRhNTFhNDhkODA3NGQ0ZjZkMmJjM2ExOWEwYzc4NTlmZjE3MDNhNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKICNpbmNsdWRlICJKSVQuaCIKKyNpbmNsdWRlICJKSVRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCiAKQEAgLTEyOCwxNiArMTI5LDE0IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRv
cjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogICAgIGdlbmVyYXRlRmFz
dENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5n
dGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQog
Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkSW5saW5l
QWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNlLCBHUFJSZWcg
c2NyYXRjaCwgR1BSUmVnIHJlc3VsdCkKK3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZElubGlu
ZUFjY2VzcyhKSVQmIGppdCwgR1BSUmVnIHN0dWJJbmZvR1BSLCBKU1ZhbHVlUmVncyBiYXNlSlNS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSKQogewogICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKIAotICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAg
IGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOwotICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgaml0LmxvYWRQ
cm9wZXJ0eShiYXNlLCBzY3JhdGNoLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBqaXQu
bG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlSlNSLnBheWxvYWRHUFIoKSwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgYXV0byBza2lwSW5saW5l
QWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBqaXQubG9hZFByb3BlcnR5KGJh
c2VKU1IucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSLCByZXN1bHRKU1IpOwogICAgIGF1dG8gZmlu
aXNoZWQgPSBqaXQuanVtcCgpOwogCiAgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOwpA
QCAtMTUyLDEyICsxNTEsMTUgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWIKIAogICAgIG1fc3Rh
cnQgPSBqaXQubGFiZWwoKTsKIAorICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZUpTUjsKKyAgICB1c2luZyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUjsK
KyAgICB1c2luZyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2hHUFI7CisKICAgICBq
aXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7Ci0gICAgZ2VuZXJhdGVHZXRC
eUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGpp
dCwgc3R1YkluZm9HUFIsIGJhc2VKU1IsIHNjcmF0Y2hHUFIsIHJlc3VsdEpTUik7CiAKICAgICBt
X2RvbmUgPSBqaXQubGFiZWwoKTsKIH0KLSNlbmRpZgogCiBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLApAQCAtMTc3LDE5
ICsxNzksMjEgQEAgdm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJ
bmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAotI2lmIFVTRShKU1ZB
TFVFNjQpCiB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJ
bmZvR1BSKQogewogICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5
cGUpKTsKIAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKIAorICAgIHVzaW5nIEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0
QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNjcmF0Y2hHUFI7CisKICAgICBqaXQubG9hZENvbnN0YW50
KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7Ci0gICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNz
KGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNl
LCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5l
QWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIGJhc2VKU1IsIHNjcmF0Y2hHUFIsIHJlc3VsdEpTUik7
CiAKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKIH0KLSNlbmRpZgogCiBKSVRQdXRCeUlkR2Vu
ZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZp
ZXIsCkBAIC0yMDIsNyArMjA2LDYgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdl
bmVyYXRvcigKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0Y2gpOwog
fQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BS
UmVnIHN0dWJJbmZvR1BSKQogewogICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKTsKQEAgLTIxMSwxNyArMjE0LDE1IEBAIHZvaWQgSklUUHV0QnlJZEdlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBz
dHViCiAKICAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CiAKLSAg
ICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBHUFJS
ZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKLSAgICBHUFJS
ZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gyOwotICAgIEdQ
UlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgdXNpbmcg
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0
QnlJZFJlZ2lzdGVyczo6dmFsdWVKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVQdXRCeUlkUmVnaXN0
ZXJzOjpzY3JhdGNoR1BSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2Ny
YXRjaDJHUFI7CiAKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0KLSAgICBqaXQu
bG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoKTsKLSAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKCkpKTsKLSAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNj
cmF0Y2gpOwotICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgYmFz
ZSwgc2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VKU1IucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgIGppdC5zdG9yZVByb3BlcnR5KHZhbHVlSlNSLCBiYXNlSlNSLnBheWxvYWRH
UFIoKSwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwogICAgIGF1dG8gZmluaXNoZWQgPSBqaXQu
anVtcCgpOwogCiAgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOwpAQCAtMjMwLDcgKzIz
MSw2IEBAIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViCiAgICAgZmluaXNoZWQubGluaygmaml0KTsK
ICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKIH0KLSNlbmRpZgogCiB2b2lkIEpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKIHsKQEAgLTM4
Myw3ICszODMsNiBAQCB2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYgaml0KQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFj
Y2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkK
IHZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
SklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOwpAQCAtMzkyLDE1
ICszOTEsMTUgQEAgdm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkkKIAogICAgIGppdC5sb2FkQ29uc3Rh
bnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKIAotICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6c2NyYXRjaDsKKyAgICB1c2luZyBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFz
ZUpTUjsKKyAgICB1c2luZyBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNSOworICAg
IHVzaW5nIEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzY3JhdGNoR1BSOwogCiAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBkb25lOwogCi0gICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAg
YXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7Ci0gICAgaml0
LmJveEJvb2xlYW4odHJ1ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUpTUi5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGF1dG8gc2tpcElubGluZUFjY2Vz
cyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5ib3hCb29sZWFuKHRydWUs
IHJlc3VsdEpTUik7CiAgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CiAKICAgICBza2lw
SW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CkBAIC00MDksNyArNDA4LDYgQEAgdm9pZCBKSVRJbkJ5
SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5z
aWduZWQgc3R1YkkKICAgICBmaW5pc2hlZC5saW5rKCZqaXQpOwogICAgIG1fZG9uZSA9IGppdC5s
YWJlbCgpOwogfQotI2VuZGlmCiAKIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OkpJVEluc3RhbmNl
T2ZHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgK
aW5kZXggMmY2OWY2NGVjMTYxYWU5MDQzZTRkYzg2MGMzODQ5NjQ5MTljNmFkZS4uZWJkZTQyNGNh
NmQ0YWQ2N2ViZjk0OTYxNzdiMGVmZWM3ZjY4ZGYyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtNDYsMTEyICs0Niwx
OTUgQEAgc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiBlbnVtIGNsYXNzIEFjY2Vz
c1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCituYW1lc3Bh
Y2UgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLXN0cnVj
dCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1QzOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSBHUFJJbmZvOjpyZWdUMjsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMg
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKLX07Ci0KLXN0
cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mbyA9IEdQUkluZm86OnJlZ1QyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2ggPSBHUFJJbmZvOjpyZWdUMzsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRC
eVZhbFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUklu
Zm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5m
bzo6cmVnVDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMjsKLSAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFu
ZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgotICAgIHN0
YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5KTsKLSAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQpOwotICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Ci19OwotCi1zdHJ1Y3QgQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJ
bmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMjsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUklu
Zm86OmFyZ3VtZW50R1BSMzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOwotfTsKLQotc3RydWN0IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6
cmVnVDE7Ci0gICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OmJhc2UpOwotICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHkpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvID0gR1BSSW5mbzo6cmVnVDI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IEdQUkluZm86OnJlZ1QzOwotfTsKLQotc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
cyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGRvbnRDbG9iYmVyUmVnaXN0ZXIgPSBHUFJJbmZvOjpyZWdU
MzsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOwotfTsKLQotc3RydWN0IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwotfTsKLQotc3RydWN0IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVn
VDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsK
LX07Ci0KLXN0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OwotfTsKLQotc3RydWN0IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BS
SW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmQgPSBHUFJJbmZv
OjpyZWdUMTsKLSAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZSk7Ci0gICAgc3RhdGljX2Fzc2VydChicmFuZCA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eSk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMjsKLX07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7
IEdQUkluZm86OnJlZ1QxIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1IgeyBH
UFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IHByb3Bl
cnR5SlNSIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDMg
fTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1QyIH07CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJ
bmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9w
ZXJ0eUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpT
VmFsdWVSZWdzIHJlc3VsdEpTUiB7IHByb3BlcnR5SlNSIH07Citjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDcgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQ
UiB7IEdQUkluZm86OnJlZ1Q2IH07CiAjZW5kaWYKK30KKworbmFtZXNwYWNlIEJhc2VsaW5lRGVs
QnlJZFJlZ2lzdGVycyB7CisjaWYgVVNFKEpTVkFMVUU2NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1
bHRKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7
IEdQUkluZm86OnJlZ1QzIH07Citjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgeyBHUFJJbmZv
OjpyZWdUMiB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBiYXNlSlNSIHsgR1BSSW5mbzo6cmVnVDMsIEdQUkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIg
SlNWYWx1ZVJlZ3MgcmVzdWx0SlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07
Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDcgfTsKK2NvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1Q2IH07CisjZW5kaWYKK30KKwor
bmFtZXNwYWNlIEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgeworI2lmIFVTRShKU1ZBTFVFNjQp
Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07Citjb25z
dGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1IgeyBHUFJJbmZvOjpyZWdUMSB9OworY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IGJhc2VKU1IgfTsKK2NvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMiB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
R1BSIHsgR1BSSW5mbzo6cmVnVDMgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCitjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9
OworY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNSIHsgR1BSSW5mbzo6cmVnVDMsIEdQ
UkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSIHsgYmFzZUpT
UiB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OnJlZ1Q3IH07Citj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgeyBHUFJJbmZvOjpyZWdUNiB9OworI2VuZGlmCit9
CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorbmFtZXNwYWNlIEJhc2VsaW5lRW51bWVyYXRvckdldEJ5
VmFsUmVnaXN0ZXJzIHsKK3N0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiB7IEdQ
UkluZm86OnJlZ1QwIH07CitzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNS
IHsgR1BSSW5mbzo6cmVnVDEgfTsKK3N0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0
SlNSIHsgR1BSSW5mbzo6cmVnVDAgfTsKK3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gR1BSSW5mbzo6cmVnVDI7CisvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEg
Q29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJ
bmZvLgorc3RhdGljX2Fzc2VydChiYXNlSlNSID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2VKU1IpOworc3RhdGljX2Fzc2VydChwcm9wZXJ0eUpTUiA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUik7CitzdGF0aWNfYXNzZXJ0KHJlc3VsdEpTUiA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHRKU1IpOworc3RhdGljX2Fzc2VydChzdHViSW5m
b0dQUiA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mb0dQUik7CisKK3N0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CitzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0Oworc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK30KKyNlbmRpZgorCituYW1lc3Bh
Y2UgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29u
c3RleHByIEdQUlJlZyByZXN1bHQgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEdQUlJl
ZyB2YWx1ZSB7IEdQUkluZm86OmFyZ3VtZW50R1BSMiB9OworY29uc3RleHByIEdQUlJlZyBwcm90
byB7IEdQUkluZm86OmFyZ3VtZW50R1BSMyB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyB7
IEdQUkluZm86OmFyZ3VtZW50R1BSMSB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSB7IEdQ
UkluZm86Om5vbkFyZ0dQUjAgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgeyBHUFJJbmZv
Ojpub25BcmdHUFIxIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHZh
bHVlSlNSICB7IEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5mbzo6YXJndW1lbnRHUFIyIH07
Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvdG9KU1IgIHsgR1BSSW5mbzo6cmVnVDUsIEdQUklu
Zm86OnJlZ1Q0IH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVn
VDEgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDFHUFIgeyBHUFJJbmZvOjpyZWdUNiB9Owor
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMkdQUiB7IEdQUkluZm86OnJlZ1Q3IH07CitzdGF0aWNf
YXNzZXJ0KCF2YWx1ZUpTUi51c2VzKHJlc3VsdEdQUikpOworc3RhdGljX2Fzc2VydCghdmFsdWVK
U1Iub3ZlcmxhcHMocHJvdG9KU1IpKTsKK3N0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoc3R1
YkluZm9HUFIpKTsKK3N0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoc2NyYXRjaDFHUFIpKTsK
K3N0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoc2NyYXRjaDJHUFIpKTsKKyNlbmRpZgorfQor
CituYW1lc3BhY2UgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworY29u
c3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsKK2NvbnN0
ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRKU1IgeyBiYXNlSlNSIH07Citjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aEdQUiB7IEdQUkluZm86OnJlZ1QzIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3Rl
eHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAg
fTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiAgeyBHUFJJbmZvOjpyZWdUMywg
R1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRKU1IgeyBiYXNl
SlNSIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDcgfTsK
K2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1Q2IH07CisjZW5kaWYK
K3N0YXRpY19hc3NlcnQoYmFzZUpTUiA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
SlNSKTsKK3N0YXRpY19hc3NlcnQocHJvcGVydHlKU1IgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHlKU1IpOworfQorCituYW1lc3BhY2UgQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1Ig
eyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IGJh
c2VKU1IgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMSB9
OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSIHsgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0
ZXhwciBKU1ZhbHVlUmVncyBkb250Q2xvYmJlckpTUiB7IEdQUkluZm86OnJlZ1QzIH07CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJ
bmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1
bHRKU1IgeyBiYXNlSlNSIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5m
bzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEdQUkluZm86OnJlZ1Qz
IH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgZG9udENsb2JiZXJKU1IgeyBHUFJJbmZvOjpyZWdU
NiwgR1BSSW5mbzo6cmVnVDcgfTsKKyNlbmRpZgorfQorCituYW1lc3BhY2UgQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnMgeworI2lmIFVTRShKU1ZBTFVFNjQpCitjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MgYmFzZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MgcmVzdWx0SlNSIHsgYmFzZUpTUiB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHRoaXNKU1Ig
eyBHUFJJbmZvOjpyZWdUMSB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUklu
Zm86OnJlZ1QyIH07Citjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgeyBHUFJJbmZvOjpyZWdU
MyB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNl
SlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1
ZVJlZ3MgcmVzdWx0SlNSIHsgYmFzZUpTUiB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHRoaXNK
U1IgeyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUNyB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
R1BSIHsgR1BSSW5mbzo6cmVnVDYgfTsKKyNlbmRpZgorfQorCituYW1lc3BhY2UgQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnMgeworY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1IgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1
bHRKU1IgeyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUiB9OworY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiB7IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm9H
UFIgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiB7IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c2NyYXRjaEdQUiB9OworfQorCituYW1lc3BhY2UgQmFzZWxpbmVQdXRCeUlkUmVnaXN0
ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1Ig
eyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSIHsgR1BS
SW5mbzo6cmVnVDEgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpy
ZWdUMyB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSIHsgR1BSSW5mbzo6cmVnVDIgfTsK
K2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDJHUFIgeyBHUFJJbmZvOjpyZWdUNCB9OworI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsgR1BSSW5m
bzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWVK
U1IgeyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUNyB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
R1BSIHsgR1BSSW5mbzo6cmVnVDYgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDJHUFIgeyBH
UFJJbmZvOjpyZWdUNCB9OworI2VuZGlmCit9CisKK25hbWVzcGFjZSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJh
c2VKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5
SlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiB7
IEdQUkluZm86OnJlZ1QyIH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5m
bzo6cmVnVDQgfTsKK2NvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiB7IEdQUkluZm86OnJlZ1Qz
IH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VK
U1IgeyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKK2NvbnN0ZXhwciBKU1ZhbHVl
UmVncyBwcm9wZXJ0eUpTUiB7IEdQUkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdUMiB9OworY29u
c3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSIHsgR1BSSW5mbzo6cmVnVDYsIEdQUkluZm86OnJl
Z1Q3IH07Citjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSIHsgR1BSSW5mbzo6cmVnVDQgfTsK
K2NvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiB7IEdQUkluZm86OnJlZ1Q1IH07CisjZW5kaWYK
K30KKworbmFtZXNwYWNlIEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgeyBHUFJJbmZvOjpyZWdU
MCB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIGJyYW5kSlNSIHsgR1BSSW5mbzo6cmVnVDEgfTsK
K2NvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMiB9OworI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSIHsgR1BSSW5m
bzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYnJhbmRK
U1IgeyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKK2NvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUNyB9OworI2VuZGlmCitzdGF0aWNfYXNzZXJ0KGJh
c2VKU1IgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZUpTUik7CitzdGF0aWNfYXNz
ZXJ0KGJyYW5kSlNSID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSKTsK
K30KIAogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAppbmRleCBlOGU1Nzg4ODQyMTg4ZTY4NTc1NzZi
ZGI2ZWMzMjZhOWFmZjhjZDlhLi5kNjAyZmM5MjZjOTMyOWUyMTJhNGQ1MDdmZDg2ZDA3OGFiYTdi
YTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtNjQzLDYgKzY0
MywxNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoUmVnaXN0ZXJJRCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZykp
OwogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoSlNWYWx1ZVJlZ3MgcmVnKQoreworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWcpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKEpTVmFsdWVSZWdzIGpzUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKK3sKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHZSZWcpKQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoanNSZWcpOworfQorCiBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBpbnQgdGFyZ2V0KQogewogICAgIGlmICh0YXJnZXQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCAxYzQ0ZmRlZmQ4
NWM5YWU4YmUxODRjOTg0Y2YxYzcwZTMzZjNhNzBjLi44ZDU1YzFjNmJlYzE1NWUyZmI5MjlkMDZl
N2MwODE3MGMzYzA1NWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKQEAgLTM3MSwyNiArMzcxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBBU1NFUlQoY2FsbEZyYW1lUmVnaXN0ZXIgIT0g
cmVnVDEpOwotICAgIEFTU0VSVChyZWdUMSAhPSByZXR1cm5WYWx1ZUdQUik7Ci0gICAgQVNTRVJU
KHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLQotICAgIC8vIFJldHVybiB0
aGUgcmVzdWx0IGluICVlYXguCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZXR1cm5WYWx1ZUdQUik7Ci0KLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICByZXQoKTsKLSNlbHNlCi0g
ICAgZW1pdE5ha2VkTmVhckp1bXAodm0oKS5nZXRDVElTdHViKG9wX3JldF9oYW5kbGVyR2VuZXJh
dG9yKS5jb2RlKCkpOwotI2VuZGlmCi19Ci0KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxl
ckdlbmVyYXRvcihWTSYpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKaW5kZXggYTJiZjZlYjNmNzU0ZWIxYTE3Y2RjNzYzMzUwNzkzOWQzMTlhYmQz
Ni4uYjRlODBlNWY2ZDVhNDk4MzcyMTBhN2JkZDVjNjY4MTk1NDhlMzNmNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMTUyLDI4ICsxNTIs
NDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7
CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1
c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJz
dCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0TG9hZFBh
eWxvYWQodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZFBheWxvYWQocHJvdG8sIHJlZ1QxKTsK
KyAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdEdQUjsKKyAgICB1
c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlSlNSOworICAgIHVzaW5nIEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9KU1I7CisgICAgdXNpbmcgQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKyAgICB1c2luZyBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxR1BSOworICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c2NyYXRjaDJHUFI7CisKKyAgICBlbWl0TG9hZFBheWxvYWQodmFsdWUsIHZh
bHVlSlNSLnBheWxvYWRHUFIoKSk7CisgICAgZW1pdExvYWRQYXlsb2FkKHByb3RvLCBwcm90b0pT
Ui5wYXlsb2FkR1BSKCkpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJh
c2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBm
b3IgU3ltYm9sLmhhc0luc3RhbmNlLgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2
YWx1ZSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvKTsKICAgICAKICAg
ICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFs
dWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIEludmFsaWRHUFJSZWcsCi0gICAg
ICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgcmVz
dWx0R1BSLAorICAgICAgICB2YWx1ZUpTUi5wYXlsb2FkR1BSKCksCisgICAgICAgIHByb3RvSlNS
LnBheWxvYWRHUFIoKSwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIHNjcmF0Y2gxR1BS
LCBzY3JhdGNoMkdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0
YW5jZU9mcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDAp
OworICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTIsMTIgKzIw
NSwzMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90
byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107Ci0gICAgCisKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZSwg
cmVnVDApOwotICAgIGVtaXRMb2FkVGFnKHByb3RvLCByZWdUMyk7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIGRzdCwgbV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhy
ZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDEpKTsKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgdXNpbmcgU2xvd09wZXJh
dGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3Bl
cmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJy
ZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIHVzaW5nIEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6dmFsdWVKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjpwcm90b0pTUjsKKyAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlSlNSID09IHByZWZl
cnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCkpOworICAgIC8vIFByb3RvIHdpbGwg
YmUgcGFzc2VkIG9uIHN0YWNrLCBqdXN0IG1ha2Ugc3VyZSBubyBvdmVybGFwCisgICAgc3RhdGlj
X2Fzc2VydCghcHJvdG9KU1IudXNlcyhnbG9iYWxPYmplY3RHUFIpKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KCFwcm90b0pTUi51c2VzKHN0dWJJbmZvR1BSKSk7CisgICAgc3RhdGljX2Fzc2VydCghdmFs
dWVKU1IudXNlcyhnbG9iYWxPYmplY3RHUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCF2YWx1ZUpT
Ui51c2VzKHN0dWJJbmZvR1BSKSk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdExvYWRUYWcodmFsdWUsIHZhbHVlSlNSLnRhZ0dQ
UigpKTsKKyAgICBlbWl0TG9hZFRhZyhwcm90bywgcHJvdG9KU1IudGFnR1BSKCkpOworICAgIGNh
bGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGRz
dCwKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgdmFsdWVKU1IsIHByb3Rv
SlNSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAppbmRleCBmZmRiOTdlNDYzOTc5NDUzZDAwZGU3NmFkMDg3MzgwODZhM2U4N2FkLi4z
N2M5MmEyOGMzZjdmYjVhZDE0NzM3NGJlMzIxZTNkMGVhOTEwYzYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNDQsNyArNDQsNiBA
QAogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
LSNpZiBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC01MywyOSArNTIsMjggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICB1
c2luZyBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdEpTUjsKKyAgICB1c2luZyBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mb0dQUjsKKyAgICB1c2luZyBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpzY3JhdGNoR1BSOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUpTUik7CiAKICAgICBpZiAoYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+
IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAg
YXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOwotICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUpTUik7CisgICAgICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUpTUi5wYXlsb2Fk
R1BSKCksIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CiAgICAgICAg
IGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VKU1IsIHByb3Bl
cnR5SlNSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7Ci0KLSAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlKTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlSlNS
LnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3IgZ2VuKAogICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworICAgICAgICAgICAgYmFzZUpTUiwg
cHJvcGVydHlKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIpOwogCiAgICAgICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKQEAgLTkzLDE5ICs5MSwxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEpTUik7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRKU1IpOwogICAgIH0KIH0KIAotI2lmICFPUyhXSU5ET1dTKQot
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1lbnRHUFI0ID0gR1BSSW5mbzo6YXJn
dW1lbnRHUFI0Owotc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1lbnRHUFI1ID0g
R1BSSW5mbzo6YXJndW1lbnRHUFI1OwotI2Vsc2UKLXN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZp
YWJsZUFyZ3VtZW50R1BSNCA9IEdQUkluZm86Om5vbkFyZ0dQUjA7Ci1zdGF0aWMgY29uc3RleHBy
IEdQUlJlZyB2aWFibGVBcmd1bWVudEdQUjUgPSBHUFJJbmZvOjpub25BcmdHUFIxOwotI2VuZGlm
Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRC
eVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewpAQCAtMTIxLDEzICsxMTEsMjQgQEAgdm9pZCBKSVQ6
OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVj
dG9yPFNsb3dDYXNlRW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBzdGF0aWNfYXNzZXJ0KGFyZ3VtZW50R1BS
MyAhPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7Ci0gICAgbW92ZShCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOwotICAgIG1vdmUoQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIHZpYWJsZUFyZ3VtZW50R1BSNCk7Ci0g
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOwotICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT4oYnl0ZWNv
ZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0KTsKKyAgICB1c2luZyBTbG93T3Bl
cmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3Bl
cmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJy
ZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDI+KCk7Cisg
ICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFyZzNKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxT
bG93T3BlcmF0aW9uLCAzPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBhcmc0SlNSID0g
cHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgND4oKTsKKworICAgIHN0YXRpY19h
c3NlcnQoIUJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2VKU1Iub3ZlcmxhcHMoYXJnNEpT
UikpOworICAgIG1vdmVWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHlKU1IsIGFyZzRKU1IpOworICAgIG1vdmVWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZUpTUiwgYXJnM0pTUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHBy
b2ZpbGVHUFIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxTbG93T3BlcmF0aW9uPigK
KyAgICAgICAgYnl0ZWNvZGUsCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGRzdCwKKyAgICAg
ICAgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgcHJvZmlsZUdQUiwgYXJnM0pTUiwgYXJn
NEpTUik7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDIsOCArMTQzLDgg
QEAgdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBi
eXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50
R1BSMSk7Ci0gICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
ID09IHJlZ1QwKTsKLSAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5ID09IHJlZ1QxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpID09IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBheWxvYWRHUFIoKSA9
PSByZWdUMSk7CiAKICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBwcm9maWxlR1BSKTsKQEAgLTE4MSw4ICsxODIsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJh
dAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1Owog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29u
c3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2Fk
R1BSKCk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKQEAgLTIwOSwxOSArMjEwLDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2VKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHlKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0SlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvR1BS
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUpTUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VK
U1IsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
LAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0
dWJJbmZvR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUik7CiAKICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2
YXRlTmFtZTsKQEAgLTIzNCw4ICsyMzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXN1bHRKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRK
U1IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQpAQCAtMjUwLDExICsyNTEsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmUKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSwgYXJndW1lbnRHUFIzKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMp
OworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+
KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVu
dEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9w
ZXJ0eUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcHJvcGVydHlKU1IpOworICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxTbG93T3BlcmF0aW9uPigKKyAgICAgICAgYnl0ZWNv
ZGUsCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGRzdCwKKyAgICAgICAgZ2xvYmFsT2JqZWN0
R1BSLCBzdHViSW5mb0dQUiwgYmFzZUpTUiwgcHJvcGVydHlKU1IpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMjY0LDggKzI3NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNS
LnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHlKU1IucGF5bG9hZEdQUigpOwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0zMjQsMTcgKzMz
NSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJh
bmQ7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
dXNpbmcgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2VKU1I7CisgICAgdXNpbmcg
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kSlNSOworICAgIHVzaW5nIEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
cmFuZCwgYnJhbmRHUFIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VKU1IpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kSlNSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRB
Y2Nlc3NHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisgICAgICAgIGJhc2VKU1IsIGJyYW5kSlNS
LCBzdHViSW5mb0dQUik7CiAKICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CkBAIC0zNjUsMTEgKzM3NiwyMCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5k
PigpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQ
UjMpOwotICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5k
T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIzKTsKKworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlw
ZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAw
PigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJyZWRBcmd1bWVu
dEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNl
SlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25z
dGV4cHIgSlNWYWx1ZVJlZ3MgYnJhbmRKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3Bl
cmF0aW9uLCAzPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBi
YXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGJy
YW5kSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAgICAgICBBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNlSlNSLCBicmFu
ZEpTUik7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNzksMTAgKzM5OSwx
MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJh
c2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgY29u
c3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpi
cmFuZEpTUi5wYXlsb2FkR1BSKCk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09
IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChicmFuZEdQUiA9PSBhcmd1bWVudEdQ
UjEpOwogCiAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rp
b25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJn
dW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwpAQCAtMzk5LDE4ICs0MTksMTgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7
CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgdXNp
bmcgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2VKU1I7CisgICAgdXNpbmcgQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kSlNSOworICAgIHVzaW5nIEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFu
ZCwgYnJhbmRHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpTUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRKU1IpOwogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworICAgICAgICBiYXNlSlNSLCBicmFuZEpT
Uiwgc3R1YkluZm9HUFIpOwogCiAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CkBAIC00MzUsMTEgKzQ1NSwxOSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOwotICAgIGNhbGxPcGVyYXRpb248ZGVj
bHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAg
IHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFu
ZE9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZl
cnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7
CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpT
UjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBicmFuZEpT
UiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYnJhbmRKU1IpOworICAgIGNhbGxPcGVyYXRp
b248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGdsb2JhbE9iamVj
dEdQUiwgc3R1YkluZm9HUFIsIGJhc2VKU1IsIGJyYW5kSlNSKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTQ0OSwxMCArNDc3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kSlNSLnBheWxvYWRHUFIoKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwot
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KGJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKICAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJh
aXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRU
eXBlcz46OnZhbHVlKTsKQEAgLTQ2MywxMSArNDkxLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlW
YWxEaXJlY3Q+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewpAQCAtNDc2LDIzICs0OTksMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjp2YWx1ZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICB1c2luZyBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnZhbHVlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvR1BSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2Zp
bGVHUFI7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVKU1IpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwg
cHJvZmlsZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJh
c2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUpT
Ui5wYXlsb2FkR1BSKCksIHByb2ZpbGVHUFIpOwogICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBw
cm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYmFzZUpTUiwgcHJvcGVydHlK
U1IsIHZhbHVlSlNSLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7CiAKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc0ludDMyID0gdHJ1ZTsKQEAgLTUxNyw2ICs1NDAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKK3RlbXBsYXRlIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKwordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0X29wX3B1dF9ieV92YWw8T3BQdXRC
eVZhbERpcmVjdD4oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBib29sIGlzRGlyZWN0
ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0
OwpAQCAtNTQ0LDE3ICs1NzQsMjYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBj
bG9iYmVyZWQuCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCB2aWFibGVBcmd1bWVudEdQUjQpOworICAgIHVzaW5n
IFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXpl
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJh
c2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNv
bnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNs
b3dPcGVyYXRpb24sIDI+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSID0g
cHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwg
ND4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBwcmVmZXJyZWRBcmd1bWVu
dEdQUjxTbG93T3BlcmF0aW9uLCA1PigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxP
YmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZh
bERpcmVjdD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9m
aWxlKCksIHZpYWJsZUFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9w
UHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxl
R1BSKTsKICAgICBlbHNlCi0gICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCB2aWFibGVBcmd1bWVudEdQUjUpOwotICAgIGNhbGxP
cGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+KEFkZHJl
c3ModmlhYmxlQXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMsIHZpYWJsZUFyZ3VtZW50R1BSNCwgdmlhYmxlQXJndW1lbnRHUFI1KTsKKyAgICAg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxl
KCksIHByb2ZpbGVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpT
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlKU1IpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlSlNSKTsKKyAgICBjYWxsT3Bl
cmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICBnbG9iYWxP
YmplY3RHUFIsIGJhc2VKU1IsIHByb3BlcnR5SlNSLCB2YWx1ZUpTUiwgc3R1YkluZm9HUFIsIHBy
b2ZpbGVHUFIpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNTk1LDE0ICs2
MzQsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3df
b3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXQKICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCk7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlSlNSLnBheWxvYWRHUFIo
KTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmls
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9maWxlR1BSOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNTsKICAgICB7Ci0gICAgICAgIFJlZ2lzdGVyU2V0IHVzZWQoQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHks
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9maWxlKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChiYXNlR1BSLCBwcm9wZXJ0
eUdQUiwgdmFsdWVHUFIsIHByb2ZpbGVHUFIpOwogICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFp
bnMocmVnVDQpKTsKICAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CiAgICAg
fQpAQCAtNjMyLDIwICs2NzEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2
YWx1ZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgdXNpbmcgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6YmFzZUpTUjsKKyAgICB1c2luZyBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eUpTUjsKKyAgICB1c2luZyBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZUpTUjsKKyAg
ICB1c2luZyBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VKU1IpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5SlNS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUpTUik7CiAKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5l
cmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9H
UFIpOworICAgICAgICBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgdmFsdWVKU1IsIEludmFsaWRHUFJS
ZWcsIHN0dWJJbmZvR1BSKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOwpAQCAtNjc4LDEyICs3MTcsMjEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmUKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4o
KTsKIAotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMik7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjMpOwot
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgdmlh
YmxlQXJndW1lbnRHUFI0KTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1
dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpPihBZGRyZXNzKHZpYWJsZUFyZ3VtZW50
R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVB
cmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIHVzaW5nIFNsb3dPcGVy
YXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGlt
aXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFy
Z3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdz
IGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNS
PFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNS
ID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlv
biwgND4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUpT
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBwcm9w
ZXJ0eUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2
YWx1ZUpTUik7CisgICAgY2FsbE9wZXJhdGlvbjxTbG93T3BlcmF0aW9uPigKKyAgICAgICAgQWRk
cmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgdmFs
dWVKU1IsIHN0dWJJbmZvR1BSLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTcxNiw5ICs3NjQsOSBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBh
cmVDYWxsRwogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHlKU1Iu
cGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZUpTUi5wYXlsb2FkR1BSKCk7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNzQyLDYgKzc5MCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFy
ZUNhbGxHCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwpAQCAtNzk1LDYgKzg0NSw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCisj
ZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpOwpAQCAtODAyLDE3ICs4NTQsMTcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BS
ID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoOworICAgIHVzaW5nIEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZUpTUjsKKyAg
ICB1c2luZyBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUjsKKyAgICB1c2luZyBC
YXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOworICAgIHVzaW5nIEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaEdQUjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpTUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UpOwogICAgIEpJVERl
bEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGJhc2VKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOwogCiAg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRl
QnlJRDsKQEAgLTgyNSw4ICs4NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGJveEJvb2xlYW4ocmVzdWx0SlNSLnBheWxv
YWRHUFIoKSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0SlNSKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0
ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9i
YmVycyByZWdpc3RlcnMuCkBAIC04NDksMTAgKzkwMSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1l
bnRHUFIyKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OwotICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXpl
KT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNs
dHlwZShvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4o
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRH
UFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpT
UiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVy
YXRpb24+KAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJ
bmZvR1BSLCBiYXNlSlNSLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg3Niw4ICs5MzYsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2wKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJl
Z1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgdXNpbmcgQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHRKU1IucGF5bG9hZEdQ
UigpID09IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgIGJveEJvb2xlYW4ocmVzdWx0
SlNSLnBheWxvYWRHUFIoKSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0SlNSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKQEAgLTkyNSwxOSArOTg4LDIwIEBAIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7Ci0gICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHVzaW5nIEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OmJhc2VKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHlKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0SlNSOworICAgIHVzaW5nIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvR1BS
OworICAgIHVzaW5nIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2hHUFI7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpTUiwg
YmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlKU1Ip
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUpTUiwgcHJvcGVydHkp
OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAgICAgICBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgcmVz
dWx0SlNSLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CiAKICAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKQEAgLTk1MCw4ICsx
MDE0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMu
YXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOworICAgIGJveEJvb2xlYW4ocmVzdWx0SlNSLnBheWxvYWRHUFIoKSwgcmVzdWx0
SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0SlNSKTsKIAogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CkBAIC05NzQsMTEgKzEwMzgsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKLSAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgIGNhbGxPcGVyYXRp
b248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICB1c2luZyBTbG93T3Bl
cmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7CisgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93
T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVm
ZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBiYXNlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4o
KTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1IgPSBwcmVmZXJyZWRBcmd1
bWVudEpTUjxTbG93T3BlcmF0aW9uLCAzPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9i
YWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlKU1IpOworICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJl
c3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIGJhc2VKU1IsIHByb3Bl
cnR5SlNSLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAyLDggKzEwNzQsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFMKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJl
Z1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgdXNpbmcgQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHRKU1IucGF5bG9hZEdQ
UigpID09IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgIGJveEJvb2xlYW4ocmVzdWx0
SlNSLnBheWxvYWRHUFIoKSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0SlNSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKQEAgLTEwNTEsMTYgKzExMjYsMTYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0KTsKKyAgICB1c2luZyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2VKU1I7Cisg
ICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcg
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgYmFzZUpTUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VK
U1IsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBi
YXNlSlNSLCByZXN1bHRKU1IsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsK
IAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRy
eUdldEJ5SWQ7CkBAIC0xMDczLDggKzExNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJl
c3VsdEpTUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMDkwLDEwICsxMTY1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwot
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
cHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwg
MT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4o
CisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIHJlc3VsdFZSZWcsCisgICAgICAgIGdsb2JhbE9i
amVjdEdQUiwgc3R1YkluZm9HUFIsIGJhc2VKU1IsCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CkBAIC0xMTAzLDcgKzExODcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogICAgIG1vdmUo
SklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2VKU1IucGF5bG9hZEdQUigpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKIApAQCAtMTEyNiwxNiArMTIxMCwxNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQpOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZUpT
UjsKKyAgICB1c2luZyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUjsKKyAgICB1
c2luZyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCBiYXNlSlNSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUpTUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksIGJhc2VKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpOwogCiAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKQEAgLTExNDgsOCArMTIzMiw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCByZXN1bHRKU1IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTE2NSwxMCArMTI0OSwyMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICB1c2lu
ZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXpl
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29u
c3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3Bl
cmF0aW9uLCAyPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBi
YXNlSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8U2xvd09wZXJhdGlvbj4oCisg
ICAgICAgIGJ5dGVjb2RlLAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICByZXN1bHRWUmVnLAor
ICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNlSlNSLAorICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3OCw3ICsxMjcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmUKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCkBAIC0xMjAyLDI0ICsxMjk2LDI3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzY3JhdGNoOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0SlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm9H
UFI7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoR1BSOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlSlNSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUpTUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92
bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAg
ICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gz
MihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2Rl
OjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVN
ZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKAorICAgICAgICAgICAgYnl0ZWNvZGUsCisgICAgICAgICAgICBPcEdl
dEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRh
ZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLAorICAgICAgICAgICAgYmFz
ZUpTUi5wYXlsb2FkR1BSKCksIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1v
ZGUubGluayh0aGlzKTsKICAgICB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgYmFzZUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
CiAKICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXRCeUlkOwpAQCAtMTIzMyw4ICsxMzMwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRK
U1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmVzdWx0SlNSKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQpAQCAtMTI1MCwxMCArMTM0NywyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7
Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9
IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24s
IDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGJhc2VKU1IgPSBwcmVmZXJyZWRBcmd1
bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9i
YWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBiYXNlSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8U2xv
d09wZXJhdGlvbj4oCisgICAgICAgIGJ5dGVjb2RlLAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAg
ICByZXN1bHRWUmVnLAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNl
SlNSLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTI2Myw3ICsxMzcwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogCkBAIC0xMjg3LDE5
ICsxMzk0LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhp
c1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1
YkluZm87Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHVzaW5nIEJhc2VsaW5lR2V0
QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzSlNSOworICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJl
ZywgdGhpc0dQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZS
ZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VKU1IpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNKU1IpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHRoaXNKU1IsIHRoaXNWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRKU1IsIGJhc2VKU1IsIHRoaXNKU1IsIHN0
dWJJbmZvR1BSKTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKQEAgLTEzMTMsMTAgKzE0MjAsMTIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkc1dpdGhUaGlz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRKU1IpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmVzdWx0SlNSKTsKIH0KIAorI2lmIFVTRShKU1ZB
TFVFNjQpCisKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcihWTSYgdm0pCiB7CkBAIC0xMzU0LDYgKzE0NjMsOCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0bwogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisjZW5kaWYK
Kwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMTM2NywxMSArMTQ3
OCwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsKLSAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwg
MD4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1l
bnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFz
ZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAgY29u
c3RleHByIEpTVmFsdWVSZWdzIHRoaXNKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3Bl
cmF0aW9uLCAzPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBi
YXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
LCB0aGlzSlNSKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8U2xvd09wZXJhdGlvbj4o
CisgICAgICAgIGJ5dGVjb2RlLAorICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAgICAgICByZXN1bHRWUmVn
LAorICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBiYXNlSlNSLCB0aGlzSlNS
LAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM4MSw4ICsxNTAzLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZUpTUi5wYXlsb2FkR1BSKCk7CisgICAgY29u
c3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OnRoaXNKU1IucGF5bG9hZEdQUigpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRH
UFIxKTsKQEAgLTEzOTksNiArMTUyMSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCisjaWYg
VVNFKEpTVkFMVUU2NCkKKwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CkBAIC0xNDM4LDYgKzE1NjIsOCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYQogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwpAQCAtMTQ1MCwxOCArMTU3NiwxOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVu
IGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNv
ZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0
IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgdXNpbmcgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpi
YXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWVKU1I7Cisg
ICAgdXNpbmcgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKKyAgICB1c2lu
ZyBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2hHUFI7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlVlJlZywgdmFsdWVKU1IpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
IGdlbigKICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUp
LAorICAgICAgICBiYXNlSlNSLCB2YWx1ZUpTUiwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVj
bWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0
S2luZDo6Tm90RGlyZWN0KTsKIAogICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKQEAgLTE0OTYsMTEgKzE2MjMsMjAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQ
UjMpOwotICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9w
dGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+
KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1l
bnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFz
ZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUpTUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VKU1IpOworICAgIGNhbGxPcGVy
YXRpb248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGdsb2JhbE9i
amVjdEdQUiwgc3R1YkluZm9HUFIsIHZhbHVlSlNSLCBiYXNlSlNSLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtMTUxMCw4ICsxNjQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8v
IGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlSlNSLnBheWxvYWRH
UFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BSID09IGFy
Z3VtZW50R1BSMSk7CkBAIC0xNTcxLDE2ICsxNzA3LDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHVzaW5nIEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvR1BSOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFz
ZUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVn
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlSlNSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZVZSZWcpOwogCiAgICAgSklU
SW5CeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KSwgYmFzZUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUik7CiAKICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7
CkBAIC0xNTkzLDcgKzE3MjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcsIHJlc3VsdEpTUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTYwOSwxMCArMTc0NSwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsbwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0
aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSID0gcHJlZmVycmVk
QXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUpTUik7CisgICAgY2FsbE9wZXJhdGlvbjxTbG93T3BlcmF0
aW9uPigKKyAgICAgICAgQWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwKKyAgICAgICAgcmVzdWx0VlJlZywKKyAgICAgICAgZ2xv
YmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgYmFzZUpTUiwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTE2MjIsNyArMTc2Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpi
YXNlSlNSLnBheWxvYWRHUFIoKTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAg
fHwgIWlzQVJNNjQoKSk7CiAKQEAgLTE2NDcsMTkgKzE3OTIsMjAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cmVzdWx0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHVzaW5nIEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6YmFzZUpTUjsKKyAgICB1c2luZyBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5SlNSOworICAgIHVzaW5nIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0SlNS
OworICAgIHVzaW5nIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisgICAg
dXNpbmcgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoR1BSOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
eXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VKU1IpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5SlNSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBiYXNlSlNSLnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUik7CiAKICAg
ICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsK
KyAgICAgICAgYmFzZUpTUiwgcHJvcGVydHlKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIpOwog
CiAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOwogICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5C
eVZhbDsKQEAgLTE2NzIsNyArMTgxOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0SlNSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTY4NywxMiArMTgzMywyMiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1
bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBh
cmd1bWVudEdQUjMpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgdmlhYmxlQXJndW1lbnRHUFI0KTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9w
ZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0
KTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9w
dGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJl
ZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xv
d09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYmFzZUpTUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CisgICAgY29uc3RleHByIEpT
VmFsdWVSZWdzIHByb3BlcnR5SlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlv
biwgND4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5C
eVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlSlNSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5SlNSKTsK
KyAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVyYXRpb24+KAorICAgICAgICBBZGRyZXNzKHN0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAorICAg
ICAgICBkc3QsCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIHByb2ZpbGVH
UFIsIGJhc2VKU1IsIHByb3BlcnR5SlNSKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTE3MDMsOCArMTg1OSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpiYXNlSlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCk7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE3
MjUsMTggKzE4ODEsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIAogdm9pZCBKSVQ6OmVt
aXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgdXNpbmcgQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHlKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHVi
SW5mb0dQUjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcHJvcGVydHlKU1IpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3Ig
Z2VuKAogICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc3R1YkluZm9HUFIpOworICAgICAgICBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgcmVzdWx0
SlNSLCBzdHViSW5mb0dQUik7CiAKICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CiAgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSB0eXBlOwpAQCAtMTc0OSw3ICsxOTA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXMK
ICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEpTUik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJh
c2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQpAQCAtMTc2Miwx
MSArMTkxOCwyMCBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUgogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlw
ZShvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICB1
c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRp
bWl6ZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRB
cmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBiYXNlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xv
d09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1Ig
PSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAzPigpOworCisgICAgbG9hZEds
b2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcHJvcGVydHlKU1IpOworICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4o
CisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIGRzdCwKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BS
LCBzdHViSW5mb0dQUiwgYmFzZUpTUiwgcHJvcGVydHlKU1IpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMTc3Niw4ICsxOTQxLDggQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2
YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVh
bFIKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2VKU1IucGF5bG9hZEdQUigpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eUpTUi5wYXlsb2FkR1BSKCk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHBy
b3BlcnR5T3JCcmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0xODIxLDYgKzE5ODYsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewogICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwpA
QCAtMjg5Myw4ICszMDYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCi10ZW1wbGF0ZSB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9uKik7
Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CkBAIC0zMDA0LDEw
ICszMTY5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgSnVtcExpc3QgZG9uZUNh
c2VzOwogCi0gICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVudW1lcmF0
b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpy
ZXN1bHRKU1IucGF5bG9hZEdQUigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlSlNSLnBheWxvYWRHUFIoKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5SlNSLnBheWxvYWRHUFIoKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvR1BSOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVu
dW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNo
MjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggOTFmYWE0ZTUyZmZiMTJhM2Y2
YjUyZTdiOTNhNTUwZGFjZTJmNGNkOC4uYzYwYjYzMmU5NGQxZGVmMmY0MjMwZjBhODRiZTgzNmNm
ZDczNTJhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCkBAIC0xMTgsNzcyICsxMTgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIEpT
VmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLQotICAgIGVt
aXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7
Ci0gICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwKLSAg
ICAgICAgYmFzZVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgcmVzdWx0UmVncyk7Ci0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0UmVncyk7Ci0KLSAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCi0gICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3Jp
dGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xv
YmJlcnMgcmVnaXN0ZXJzLgotICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgotICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0
V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLQotICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotCi0gICAgZW1pdExvYWQyKGJhc2UsIGJh
c2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCksIHByb3BlcnR5LCBwcm9wZXJ0
eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHksIHByb3BlcnR5UmVncy50YWdHUFIoKSk7
Ci0KLSAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRS
ZWdzLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0KLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2RlbEJ5
VmFscy5hcHBlbmQoZ2VuKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKLQotICAgIC8vIFdl
IHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3
cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KLSAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCi0gICAg
Ly8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVj
dGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hv
dWxkRmlsdGVyQmFzZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0KLSAgICBKSVREZWxCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwotCi0gICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKLQotICAgIGVtaXRMb2FkMihiYXNlLCBiYXNlUmVncy50YWdHUFIo
KSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpLCBwcm9wZXJ0eSwgcHJvcGVydHlSZWdzLnRhZ0dQUigp
LCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKSwgVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBy
ZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBKU1ZhbHVl
UmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBKSVREZWxC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwotCi0gICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBlbWl0TG9hZChiYXNlLCBiYXNl
UmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKTsKLQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRy
KG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLQotICAgIGVt
aXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwotCi0g
ICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50
aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVy
cygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0g
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgcmVnVDAsIHJl
Z1Q0KTsKLSAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIHJlZ1QwLCByZWdUNCk7Ci0K
LSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9w
cm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJv
cGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBtX2dl
dEJ5VmFscy5hcHBlbmQoZ2VuKTsKLQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwot
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0g
ICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
LQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRC
eVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0KLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci0gICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKLSAgICBhdXRvIGJhc2VHUFIgPSBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApOwot
ICAgIGF1dG8gcHJvcGVydHlHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotCi0gICAg
ZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0K
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAg
ICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdH
UFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotfQotCi0KLXZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgQVNTRVJU
KGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAg
SklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07
Ci0gICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7Ci0KLSAgICBhdXRvIGJhc2VHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IGF1dG8gcHJvcGVydHlHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi0K
LXZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKLQotICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywg
cmVnVDIpOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOwotCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLQotICAgIEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJ
bnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKLSAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc1N5bWJvbCA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9wdXRCeVZhbHMuYXBwZW5k
KGdlbik7Ci0KLSAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRl
LWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCi0gICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlv
bmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNp
emUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5
NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2
YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5t
X3B1dEtpbmQ7Ci0KLSAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNb
bV9wdXRCeVZhbEluZGV4KytdOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgSlNWYWx1ZVJlZ3MgYmFzZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MocmVnVDMsIHJl
Z1QyKTsKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KTsKLQotICAgIGF1
dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZp
bmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxk
T3B0aW1pemU7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlUmVncywg
cHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MsIGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51
bGxwdHIpKTsKLQotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0g
Ynl0ZWNvZGUubV9icmFuZDsKLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIGJyYW5kUmVncyhyZWdUMywgcmVnVDIpOwotICAgIGVtaXRMb2Fk
KGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwotICAgIGVt
aXRMb2FkKGJyYW5kLCBicmFuZFJlZ3MudGFnR1BSKCksIGJyYW5kUmVncy5wYXlsb2FkR1BSKCkp
OwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQ
UigpKTsKLQotICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7Ci0KLSAgICAv
LyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2lu
Y2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCi0gICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgot
ICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBl
ZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2Us
IFNob3VsZEZpbHRlckJhc2UpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZh
dGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzKHJlZ1QxLCByZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgYnJhbmRSZWdzKHJlZ1QzLCByZWdUMik7Ci0KLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4g
PSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXhdOwotICAg
ICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZh
dGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOwotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENoZWNrUHJpdmF0ZUJyYW5kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJh
bmQ7Ci0gICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVl
UmVncyBicmFuZFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVn
cy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICBlbWl0TG9hZChicmFuZCwg
YnJhbmRSZWdzLnRhZ0dQUigpLCBicmFuZFJlZ3MucGF5bG9hZEdQUigpKTsKLQotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7Ci0KLSAgICBK
SVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0
ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIGJyYW5kUmVncyhyZWdUMywgcmVnVDIp
OwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFu
ZEFjY2Vzc0luZGV4XTsKLSAgICArK21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXg7Ci0gICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdz
LCBicmFuZFJlZ3MpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9wdXRfYnlfdmFs
PE9wUHV0QnlWYWxEaXJlY3Q+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLQotICAg
IGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwot
ICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOwotCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYnl0ZWNvZGUsIHJlZ1QwLCByZWdUNik7Ci0gICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCks
IHJlZ1Q2KTsKLQotICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1Zh
bHVlUmVncyhyZWdUNSwgcmVnVDQpLCByZWdUNiwgSW52YWxpZEdQUlJlZyk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7Ci0KLSAgICAvLyBJQyBjYW4gd3JpdGUg
bmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCi0g
ICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVm
ZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwg
U2hvdWxkRmlsdGVyQmFzZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlOwotICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmlj
dCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7Ci0KLSAgICBhdXRvIGxv
YWQgPSBbJl0oYXV0byBieXRlY29kZSkgewotICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgICAgIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5
dGVjb2RlKTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKLSAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKLSAgICB9OwotCi0gICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7Ci0gICAgZWxzZQotICAgICAgICBs
b2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7Ci0KLSAgICBKSVRQdXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwotCi0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotCi0gICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4g
dG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KLSAgICAvLyBTd2FwcGluZyBzaG91
bGRuJ3QgaGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4KLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVn
VDIsIHJlZ1QxLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwg
cmVnVDUsIHJlZ1Q0KTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3Qg
PyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0
dWJJbmZvKCksIHByb2ZpbGUpOwotCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1p
dExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgcmVnVDEpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRS
ZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlc3Vs
dFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
cHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0g
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKLSAgICAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwotfQotCi0KLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVt
aXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0
UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlc3Vs
dFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
cHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7Ci0gICAgCi0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotCi0gICAgaWYgKCppZGVudCA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0g
ICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpv
ZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2Rl
KCksIHJlZ1QyKTsKLSAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihO
b3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpB
cnJheUxlbmd0aCkpLCByZWdUMik7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEo
KSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgcmVnVDAsIHJlZ1QyKTsKLSAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7
Ci0gICAgfQotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7Ci0gICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmls
ZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxp
ZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVn
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRl
Y29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9m
aWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0gICAgCi0g
ICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZCh0aGlzVlJlZywg
cmVnVDQsIHJlZ1QzKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzVlJlZywgcmVnVDQpOwot
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2Zp
bGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICpp
ZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1Q0LCByZWdUMyksIEludmFsaWRHUFJSZWcpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJl
Z3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNX
aXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJl
c3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1Yklu
Zm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1Qz
KSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVj
dHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAv
LyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lz
dGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKLSAgICAvLyBzdWNoIHRo
YXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNl
IGZyb20gdGhpcy4KLSAgICAKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAg
ICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7Ci0gICAgCi0gICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdU
MCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRD
b2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEludmFsaWRHUFJSZWcsCi0gICAgICAgIHJl
Z1QxLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCksIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVj
dCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9wdXRC
eUlkcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCi0gICAgLy8gRklYTUU6
IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRv
IHJlZHVjZSBjb2RlIHNpemUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVy
QmFzZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0KLSAgICAvLyBKSVRQdXRC
eUlkR2VuZXJhdG9yIG9ubHkgcHJlc2VydmUgdGhlIHZhbHVlIGFuZCB0aGUgYmFzZSdzIHBheWxv
YWQsIHdlIGhhdmUgdG8gcmVsb2FkIHRoZSB0YWcuCi0gICAgZW1pdExvYWRUYWcoYmFzZSwgcmVn
VDEpOwotCi0gICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5
SWRJbmRleCsrXTsKLSAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAg
ICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7Ci0gICAgCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotCi0g
ICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZh
bGlkR1BSUmVnKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7Ci0K
LSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBKSVRJbkJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwotCi0gICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0KLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEs
IHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgcmVnVDAsIHJlZ1Q0KTsKLQotICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJl
Zyk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKLQotICAgIGVt
aXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
VmFsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwot
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQot
ICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgr
K107Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7Ci0KLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwotfQotCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFj
Y2Vzc1R5cGUgdHlwZSkKLXsKLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9w
ZXJ0eU9yQnJhbmQsIHJlZ1QzLCByZWdUMik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKLQotICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
bV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdU
MCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNz
VHlwZSB0eXBlKQotewotICAgIC8vIEZJWE1FOiA2NC1iaXQgc2VlbXMgdG8gYWxzbyBpZ25vcmUg
YmFzZS9wcm9wZXJ0eS4KLSAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGJhc2UpOwotICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7Ci0KLSAgICBKSVRJbkJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwotICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJp
dmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7Ci0KLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0
ZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9o
YXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSGFzUHJpdmF0ZU5hbWU+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1f
ZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fcHJvcGVydHksIEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBl
bWl0SGFzUHJpdmF0ZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5t
X2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93
KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1
cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKQEAgLTEzNzMsOCArNjA3
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCi10ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9uKik7Ci0KIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>